我有一个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'
这种情况发生在ubuntu18上,非常奇怪,因为我在Mac上运行完全相同的命令,没有任何问题。值得一提的是,我在Ubuntu上有python3.6,在Mac上有python3.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/
但这也没什么帮助。这已经成为一个麻烦,我还没有找到一个好的资源来解释这一切。所以任何帮助都是非常感谢的。你知道吗
更新:我忘了提到我在python3本身中运行from package.conf.my_conf import somevar
,没有任何问题。你知道吗
下面是我如何解决这个问题,我把它张贴在这里,以防它可能会帮助别人。如问题中所述,我意识到运行以下代码没有问题:
所以我想我的终端和python命令行之间肯定有些不同。所以我比较了两种情况下的
PYTHONPATH
:在我的终端打印:
以及python中的以下内容:
印刷:
所以我更新了终端中的
PYTHONPATH
,使用:这就解决了问题。总之,我采取了以下步骤:
__init__.py
存在于所有子目录中PYTHONPATH
设置正确尝试将导入更改为
注意“包装”前的点(.)。它告诉python查看当前目录,而不是搜索python库目录。你知道吗
相关问题 更多 >
编程相关推荐