gpt4 book ai didi

Python venv ModuleNotFoundError

转载 作者:行者123 更新时间:2023-11-30 22:23:08 36 4
gpt4 key购买 nike

(在用重复的问题投票标记我之前,请注意,我在这个问题上找到的所有内容都与 virtualenv 有关,而不是 venv)

系统:

  • Ubuntu 服务器 16.04
  • 已安装 Python 3.6,原生 Python 3.5

背景(人为的例子,所以可能有一两个错别字,但想法是重要的部分)

我有一个以下形式的项目:

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

在 fileb.py 中,我有一个导入语句,例如

import project.packageA.fileA

我创建了一个 venv;

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,使 sys.path 现在指向“Project”和“project”
  3. 完整阅读文档 here
  4. 已验证 os.sys.path 显示项目和项目路径

问题:必须可以使用 venv 进行模块导入,否则它的值将为零 - 那么我的设置中根本缺少什么? (对于virtualenv,我只使用了'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]

如果我将“path/to/packageA”添加到我的 PYTHONPATH,则导入有效。要使用它,我必须将每个子包添加到我的项目中——对于大型项目来说不太理想。

最佳答案

这一行

​$ source project/packageB/fileB.py

失败是因为

  1. import 路径困惑,它包含 project 文件夹,但它不应该包含
  2. 项目可能不在您的PYTHONPATH

修复它

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

​import packageA.fileA

第 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 包/模块 搜索无关,因此这是一次浪费的尝试)。

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

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

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

$ python project/packageB/fileB.py

最后,通过编辑虚拟环境的 bin 目录中的 activate 脚本来永久更新您的虚拟环境。在顶部附近的某个位置添加 PYTHONPATH 导出。

关于Python venv ModuleNotFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48130371/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com