我在做一个python项目,它的目录结构如下所示
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
crawler.py
中的import语句是
from config import DEFAULT_DATA_PATH
我无法理解导入在python中是如何工作的,特别是当它涉及到不同的目录时,比如从根目录导入到基目录。
我是否还需要在根目录中添加__init__.py
,以便它成为一个包,然后使用.
导入它?
有没有更好的方法来处理进口,或者我在这里遗漏了一些基本知识?
首先将
from config import DEFAULT_DATA_PATH
更改为from ..config import DEFAULT_DATA_PATH
,然后在SEC-Edgar
目录中添加空的__init__.py
。然后,尝试从SEC Edgar所在的位置(目录)执行模块
python -m SEC-Edgar.SECEdgar.test
,或者对正在运行的任何模块执行类似的操作。这里有三件事要注意。
config.py
和crawler.py
模块不共享同一父目录。所以,当您尝试从crawler.py
中from config import DEFAULT_DATA_PATH
时,Python无法为您导入它。__init__.py
文件就可以完成。__name__
属性:因此,我们使用
-m
选项运行它,为Python执行相关导入提供包信息。[回应评论] 这是对我有用的东西
我在SEC Edgar目录外
配置py
爬虫程序.py
测试.py
您的代码很好,问题是由Python path引起的。
试着回答这个问题: python如何/在哪里可以找到名为“config”的模块?
因此,我建议您找到以下步骤来理解和解决问题:
缩小范围 在crawler.py中,使用以下主:
print(sys.path)
将显示python路径。您可能无法在路径中找到项目根目录。crawler.py
,输出将如下所示:['C:\\dev\\projects\\SEC-Edgar\\SECEdgar', ... 'C:\\dev\\projects\\SEC-Edgar'.] DEFAULT_DATA_PATH=TEST
TEST
将是SEC Edgar\config.py中的值这仅适用于dev,对于打包/部署,您需要正确配置setup.py。你可以参考:https://docs.python.org/2/distutils/setupscript.html
使用
from ..config import DEFAULT_DATA_PATH
参考:Intra-package References
如果出现错误:
Attempted relative import in non-package
参考:this question
相关问题 更多 >
编程相关推荐