【发布时间】:2020-10-10 21:08:46
【问题描述】:
我有一个像这样的项目目录
/work
/venv
/project1
app.py
/package1
/package2
etc
脚本 app.py 运行我正在处理的项目的位置。当我跑步时
python -m site 来自/project1 目录,正如预期的那样
sys.path = [
'/work/project1',
加上相关的/lib/pythonX.Y 路径。但是,当运行 app.py(从 project1 中)时,此导入
from package1 import ...
以 ModuleNotFoundError 失败,而 from .package1 import ... 工作正常,因为它告诉 python 搜索 app.py 所在的目录。所以,我将它添加到 app.py 的开头
import sys
print(sys.path)
结果是
sys.path = [
'/work',
导入到 app.py 时搜索的目录不是/work/project1,而是/work。 python -m site 和 print(sys.path) 之间存在这种差异的原因是什么?确保 /work/project1 始终是 sys.path 的一部分的最佳方法是什么?
我想避免使用 site.addsitedir() 之类的东西,也许改用 .pth 文件。从我读过的内容来看,虽然 .pth 文件属于 /lib/pythonX.Y/sitepackages,但我还需要此解决方案独立于系统,以便从 github 克隆 /project1 的协作者不必添加自己的 .pth 文件。
【问题讨论】:
标签: python sys python-venv sys.path