Python Can';t从同一项目的bin目录导入模块
我正在构建一个库,它将通过pip被其他项目所包含 我有以下目录(“venv”是一个virtualenv): 我激活了虚拟电视 在bin/run.py中,我有:Python Can';t从同一项目的bin目录导入模块,python,python-import,Python,Python Import,我正在构建一个库,它将通过pip被其他项目所包含 我有以下目录(“venv”是一个virtualenv): 我激活了虚拟电视 在bin/run.py中,我有: from myproj.logger import LOG 但我总是会 ImportError: No module named myproj.logger “项目”总监的以下工作: python -c "from myproj.logger import LOG" 从“bin”目录调用时,将“project”目录添加到python
from myproj.logger import LOG
但我总是会
ImportError: No module named myproj.logger
“项目”总监的以下工作:
python -c "from myproj.logger import LOG"
从“bin”目录调用时,将“project”目录添加到pythonpath的操作不正确。如何从我的bin目录中的脚本中从“myproj”导入模块?这里的解决方案是找到您拥有的virtualenv,然后在开发人员模式下安装软件包 源venv/bin/激活 pip安装-e 然后可以从
run.py
导入myproject.logger
您还需要创建一个setup.py文件,以便能够将软件包安装到您的环境中。如果您还没有,可以阅读官方文档。只有当前工作目录在PYTHONPATH中,用于解析依赖项。所以,如果您在bin中并执行脚本,则project不再位于路径中。您必须使用一种常见的方法将project添加到PYTHONPATH中,方法可以是附加到环境变量,也可以通过编程方式编辑sys.path列表,如另一个答案所示。将
myproject
安装到venv
virtualenv;然后,您将能够从任何脚本(包括bin/run.py
)导入myproject
,同时激活环境,而无需sys.path
破解
要安装,请为myproject
软件包创建,并在virtualenv处于活动状态时从project
目录运行:
$ pip install -e .
它将安装
myproject
到位(在不重新安装myproject
的情况下,myproject
模块中的更改将立即可见)。在PYTHONPATH中添加项目路径,因为OP使用virtualenv<代码>系统路径操作是或甚至是。我更喜欢使用脚本的绝对路径,这样脚本就可以在任何地方运行sys.path.append(os.path.join(os.path.dirname(sys.argv[0]),“…”)
如果OP正在使用virtualenv,这应该是可以接受的答案。
$ pip install -e .