Python venv ModuleNotFoundE

2024-06-17 08:30:18 发布

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

(在对我进行重复问题投票之前,请注意,我在这个问题上所能找到的一切都与virtualenv有关,而不是venv)

系统

  • Ubuntu服务器16.04
  • 已安装Python3.6,Python3.5本机

背景 (做作的例子,可能会有一两处错别字,但想法是最重要的部分)

我有一个项目的形式是:

Project/
├── __init__.py
└── project
    ├── packageA
    │   ├── fileA.py
    │   └── __init__.py
    └── packageB
        ├── fileB.py
        └── __init__.py

在文件b.py,我有一个导入语句,例如

^{pr2}$

我创造了一个静脉

cd /path/to/Project; python3.6 -m venv .venv; source .venv/bin/activate

然后我就跑

source project/packageB/fileB.py

这会给我一个错误:

ModuleNotFoundError: no module named 'project'

试图解决

  1. 将路径添加到“Project”并将“Project”添加到$path
  2. 修改.venv/bin/activate脚本中的$PYTHONPATH,以便系统路径现在指向“项目”和“项目”
  3. 完整阅读文档here
  4. 证实操作系统系统路径显示项目和项目路径

问题:必须可以使用venv进行模块导入,否则它的值将为零——那么我在设置中基本上缺少了什么?(对于viritualenv,我只使用了'add2virtualenv')

[编辑-显示更多详细信息]

# Changes to .venv/bin/activate
PYTHONPATH="/home/steve/Temp/Project:/home/steve/Temp/Project/project:$PYTHONPATH"
export PYTHONPATH

python -c "import os; print(os.sys.path)"
['', '/home/steve/Temp/Project', '/home/steve/Temp/Project/project', .....

[Edit2-将packageA添加到PYTHONPATH Works]

如果我在PYTHONPATH中添加'path/to/packageA',导入就可以了。为了使用这个,我必须将每个子包添加到我的项目中——这对于大型项目来说不太理想。在


Tags: topath项目py路径projecthomevenv
2条回答

这条线

​$ source project/packageB/fileB.py

失败的原因

  1. import路径弄乱了,它包括project文件夹,但不应该包含
  2. project可能是不在您的PYTHONPATH

去修理它

步骤1)修复fileB.py中的import语句,将import替换为

^{pr2}$

步骤2)通过检查您的bash环境,亲自确认您是否将project添加到PYTHONPATH

​$ echo $PYTHONPATH     # does it contain `path/to/project`?

如果不是临时修理的话

​$ export PYTHONPATH=path/to/project:$PYTHONPATH   # forget `/path/to/Project` you only need `path/to/Project/project`

(注意,$PATH的更改与Python package/module搜索无关,因此这是一次浪费的尝试)。在

然后,当您运行脚本时,它不会失败:

$ source project/packageB/fileB.py      # success?!

顺便说一句,最好使用python调用python脚本:

$ python project/packageB/fileB.py

最后,通过编辑虚拟环境的activate目录中的activate脚本来永久更新虚拟环境。在上面靠近顶部的地方添加PYTHONPATH导出。在

这是一个有点模糊的情况。我的解决方案是:创建一个设置.py对于您的项目(无论如何都是有益的),并且使用activated venv做一个“python”设置.py发展”。在

这会将您的项目添加到PTH文件中,因此您可以导入。在

例如设置.py,摘自互联网:

# from http://python-packaging.readthedocs.io/en/latest/minimal.html

from setuptools import setup

setup(name='funniest',
      version='0.1',
      description='The funniest joke in the world',
      url='http://github.com/storborg/funniest',
      author='Flying Circus',
      author_email='flyingcircus@example.com',
      license='MIT',
      packages=['funniest'],
      zip_safe=False)

相关问题 更多 >