无法从同一项目的bin目录导入模块

use*_*250 3 python python-import

我正在构建一个将通过pip包含在其他项目中的库.

我有以下目录('venv'是virtualenv):

project
  \- bin
     \- run.py
  \- myproj
     \- __init__.py
     \- logger.py
  \- venv
Run Code Online (Sandbox Code Playgroud)

我激活了virtualenv.

在bin/run.py我有:

from myproj.logger import LOG
Run Code Online (Sandbox Code Playgroud)

但我总是得到

ImportError: No module named myproj.logger
Run Code Online (Sandbox Code Playgroud)

以下来自"项目"目录:

python -c "from myproj.logger import LOG"
Run Code Online (Sandbox Code Playgroud)

从'bin'目录调用时,它没有正确地将'project'目录添加到pythonpath.如何从bin目录中的脚本导入'myproj'中的模块?

jfs*_*jfs 9

安装myproject到venvvirtualenv; 然后你可以在没有黑客的情况下激活环境时myproject从任何脚本(包括bin/run.py)导入sys.path.

要安装,创建project/setup.py了myproject包,并从运行project目录,而virtualenv中处于活动状态:

$ pip install -e .
Run Code Online (Sandbox Code Playgroud)

它将安装在myproject原位(myproject模块中的更改立即可见,无需重新安装myproject).


ean*_*son 5

最简单的解决方案是将父文件夹作为可搜索路径附加到导入上方.

__PRE__

  • 鉴于OP使用virtualenv; `sys.path`操作是[不必要的](http://stackoverflow.com/a/16816683/4279)或甚至[有害](http://stackoverflow.com/a/14186074/4279). (2认同)
  • 我更喜欢使用脚本中的绝对路径,因此脚本可以从任何地方运行.`sys.path.append(os.path.join(os.path.dirname(sys.argv [0]),'..'))` (2认同)