Python配置文件
我正在从事一个python项目,其目录结构如下所示Python配置文件,python,python-2.7,Python,Python 2.7,我正在从事一个python项目,其目录结构如下所示 SEC-Edgar ├── SECEdgar │ ├── __init__.py │ ├── companylist.txt │ ├── crawler.py │ ├── crawler.pyc │ ├── data.txt │ └── test.py ├── config.py ├── requirements.txt └── setup.py 我试图在crawler.py中使用配置模块,但它给出了一个ImportE
SEC-Edgar
├── SECEdgar
│ ├── __init__.py
│ ├── companylist.txt
│ ├── crawler.py
│ ├── crawler.pyc
│ ├── data.txt
│ └── test.py
├── config.py
├── requirements.txt
└── setup.py
我试图在crawler.py
中使用配置模块,但它给出了一个ImportError
Traceback (most recent call last):
File "SECEdgar/test.py", line 3, in <module>
from crawler import SecCrawler
File "/Users/rahul/Code/SEC-Edgar/SECEdgar/crawler.py", line 9, in <module>
from config import DEFAULT_DATA_PATH
ImportError: No module named config
我无法理解导入在python中是如何工作的,特别是当涉及到不同的目录时,比如从根目录导入到基目录
我是否也需要在根目录上添加\uuuu init\uuuuuuuuuuupy
,以便它成为一个包,然后使用
导入它
是否有更好的方法来处理导入,或者我在这里缺少了一些基础知识?首先将
从config import DEFAULT\u DATA\u PATH更改为from..config import DEFAULT\u DATA\u PATH
,然后在SEC Edgar
目录中添加一个空的\u init\uuuuuuuuuuuu.py
然后,尝试以python-msecedgar.SECEdgar.test的形式执行模块,或者从存在SECEdgar的位置(目录)对正在运行的任何模块执行类似的操作
这里有三件事需要注意
您的config.py
和crawler.py
模块不共享同一父目录。因此,当您尝试从配置导入默认数据路径时,crawler.py
Python无法为您导入它
只有当python中的其他目录是包时,我们才能从该目录导入模块(.py文件)。只需在该目录中添加一个空的\uuuu init\uuuu.py
文件即可
我们现在可以使用相对进口。但是,在相对导入期间,Python使用模块的\uuuu name\uuuu
属性,如下所示:
相对导入使用模块的名称属性来确定
模块在包层次结构中的位置。如果模块的名称为
不包含任何程序包信息(例如,它被设置为“main”)
然后解析相对导入,就好像模块是顶层一样
模块,而不管模块在文件中的实际位置
系统
因此,我们使用-m
选项运行它,为Python提供包信息以执行相对导入
[回应评论]
这就是对我有用的东西
SEC-Edgar
├── SECEdgar
│ ├── __init__.py
│ ├── crawler.py
│ └── test.py
├── __init__.py
└── config.py
我在SEC Edgar目录外
C:\Users\username\Documents> ls
SEC-EDGAR OTHERS
C:\Users\username\Documents> python -m SEC-Edgar.SECEdgar.test
Lets assume I'm an SecCrawler
config.py
DEFAULT_DATA_PATH = "some/path"
from ..config import DEFAULT_DATA_PATH
SecCrawler = "Lets assume I'm an SecCrawler"
from crawler import SecCrawler
print(SecCrawler)
crawler.py
DEFAULT_DATA_PATH = "some/path"
from ..config import DEFAULT_DATA_PATH
SecCrawler = "Lets assume I'm an SecCrawler"
from crawler import SecCrawler
print(SecCrawler)
test.py
DEFAULT_DATA_PATH = "some/path"
from ..config import DEFAULT_DATA_PATH
SecCrawler = "Lets assume I'm an SecCrawler"
from crawler import SecCrawler
print(SecCrawler)
首先将从config import DEFAULT_DATA_PATH
更改为from..config import DEFAULT_DATA_PATH
,然后在SEC Edgar
目录中添加一个空的\u init\u.py
然后,尝试以python-msecedgar.SECEdgar.test的形式执行模块,或者从存在SECEdgar的位置(目录)对正在运行的任何模块执行类似的操作
这里有三件事需要注意
您的config.py
和crawler.py
模块不共享同一父目录。因此,当您尝试从配置导入默认数据路径时,crawler.py
Python无法为您导入它
只有当python中的其他目录是包时,我们才能从该目录导入模块(.py文件)。只需在该目录中添加一个空的\uuuu init\uuuu.py
文件即可
我们现在可以使用相对进口。但是,在相对导入期间,Python使用模块的\uuuu name\uuuu
属性,如下所示:
相对导入使用模块的名称属性来确定
模块在包层次结构中的位置。如果模块的名称为
不包含任何程序包信息(例如,它被设置为“main”)
然后解析相对导入,就好像模块是顶层一样
模块,而不管模块在文件中的实际位置
系统
因此,我们使用-m
选项运行它,为Python提供包信息以执行相对导入
[回应评论]
这就是对我有用的东西
SEC-Edgar
├── SECEdgar
│ ├── __init__.py
│ ├── crawler.py
│ └── test.py
├── __init__.py
└── config.py
我在SEC Edgar目录外
C:\Users\username\Documents> ls
SEC-EDGAR OTHERS
C:\Users\username\Documents> python -m SEC-Edgar.SECEdgar.test
Lets assume I'm an SecCrawler
config.py
DEFAULT_DATA_PATH = "some/path"
from ..config import DEFAULT_DATA_PATH
SecCrawler = "Lets assume I'm an SecCrawler"
from crawler import SecCrawler
print(SecCrawler)
crawler.py
DEFAULT_DATA_PATH = "some/path"
from ..config import DEFAULT_DATA_PATH
SecCrawler = "Lets assume I'm an SecCrawler"
from crawler import SecCrawler
print(SecCrawler)
test.py
DEFAULT_DATA_PATH = "some/path"
from ..config import DEFAULT_DATA_PATH
SecCrawler = "Lets assume I'm an SecCrawler"
from crawler import SecCrawler
print(SecCrawler)
从..配置导入默认数据路径使用from
参考:
如果出现错误:尝试在非包中进行相对导入
请参阅:从..配置导入默认数据路径使用
参考:
如果出现错误:尝试在非包中进行相对导入
请参阅:您的代码正常,问题是由以下原因引起的
试着回答这个问题:
python如何/在何处找到名为“config”的模块
因此,我建议您找到以下步骤来理解和解决问题:
缩小范围
在crawler.py中,使用以下主选项:
if __name__ == '__main__':
import sys
print(sys.path)
from config import DEFAULT_DATA_PATH
print 'DEFAULT_DATA_PATH=%s' % DEFAULT_DATA_PATH
print(sys.path)
将向您显示python路径。您可能无法在路径中找到项目根李>
如果明确需要管理python路径,可以在IDE中配置它。e、 我正在使用pycharm,我将在设置/项目结构中,在运行/调试配置中选中“将源根添加到PYTHONPATH”
配置后,重新运行crawler.py
,输出将与以下内容相同:
['C:\\dev\\projects\\SEC Edgar\\SECEdgar',…'C:\\dev\\projects\\SEC Edgar'.]
默认数据路径=测试
TEST
将是SEC Edgar\config.py中的值
这仅适用于开发人员,对于打包/部署,您需要正确配置setup.py。您可以参考:您的代码很好,问题是由
试着回答这个问题:
python如何/在何处找到名为“config”的模块
因此,我建议您找到以下步骤来理解和解决问题:
缩小范围
在crawler.py中,使用以下主选项:
if __name__ == '__main__':
import sys
print(sys.path)
from config import DEFAULT_DATA_PATH
print 'DEFAULT_DATA_PATH=%s' % DEFAULT_DATA_PATH
print(sys.path)
将向您显示python路径。您可能无法在路径中找到项目根李>
如果您清楚需要管理python路径,您可以