ModuleNotFoundError:在ubuntu上没有名为“package”的模块

2024-04-20 08:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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,没有任何问题。你知道吗


Tags: 代码frompyimportpackageinitmymac
2条回答

下面是我如何解决这个问题,我把它张贴在这里,以防它可能会帮助别人。如问题中所述,我意识到运行以下代码没有问题:

python
from package.conf.my_conf import somevar

所以我想我的终端和python命令行之间肯定有些不同。所以我比较了两种情况下的PYTHONPATH

echo $PYTHONPATH 

在我的终端打印:

/home/myusername

以及python中的以下内容:

import sys
print(sys.path)

印刷:

['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/home/myusername/.local/lib/python3.6/site-packages', '/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages']

所以我更新了终端中的PYTHONPATH,使用:

export PYTHONPATH=export PYTHONPATH=/home/myusername:/usr/lib/python36.zip:/usr/lib/python3.6:/usr/lib/python3.6/lib-dynload:/home/myusername/.local/lib/python3.6/site-packages:/usr/local/lib/python3.6/dist-packages:/usr/lib/python3/dist-packages

这就解决了问题。总之,我采取了以下步骤:

  1. 确保__init__.py存在于所有子目录中
  2. PYTHONPATH设置正确

尝试将导入更改为

from .package.conf.my_conf import somevar

注意“包装”前的点(.)。它告诉python查看当前目录,而不是搜索python库目录。你知道吗

相关问题 更多 >