我有一个结构如下的python项目:
package/
__init__.py
conf/
my_conf.py
__init__.py
lib/
tasks/
somecode.py
__init__.py
在somecode.py
中,我从conf导入,如:
from package.conf.my_conf import somevar
当我尝试使用以下命令在命令行中执行代码时:
python3 package/lib/tasks/somecode.py
我收到以下错误:
ModuleNotFoundError: No module named 'package'
这种情况在Ubuntu 18上发生,确实很奇怪,因为我在Mac上运行了完全相同的命令,没有任何问题。值得一提的是,我在Ubuntu上有python 3.6,在Mac上有3.7。这有什么不同吗?
我一直在阅读有关SO的文章,并且相对导入已经不见了,但我认为这不是我的问题,因为否则它将无法在Mac上运行。但是,我试了一下,并将代码更新为:
from ...conf.my_conf import somevar
而且我现在收到一个新的错误:
ValueError: attempted relative import beyond top-level package
我还在Ubuntu上将我的PYTHONPATH
设置为:
/usr/local/lib/python3.6/dist-packages/:/home/myusername/package/
而且那也没有帮助。这变得很麻烦,而且我一直找不到能够解释这一切的好资源。因此,非常感谢您的帮助。
from .package.conf.my_conf import somevar
[在包之前注意Dot(。)。它告诉python查看当前目录,而不是进入并搜索python库目录。