Python Can';t从同一项目的bin目录导入模块

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

我正在构建一个库,它将通过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”目录添加到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 .