如何从python中bin文件夹中的脚本导入包/模块

tim*_*nil 24 python

在组织python项目时,这种结构似乎是一种标准的方式:

myproject\
    bin\
        myscript
    mypackage\
        __init__.py
        core.py
    tests\
        __init__.py
        mypackage_tests.py
setup.py
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何导入mycore.py所以我可以在myscript中使用它?

两个__init__.py文件都是空的.

myscript的内容:

#!/usr/bin/env python
from mypackage import core
if __name__ == '__main__':
    core.main()
Run Code Online (Sandbox Code Playgroud)

core.py的内容

def main():
    print 'hello'
Run Code Online (Sandbox Code Playgroud)

当我从myproject目录中运行myscript时,出现以下错误:

Traceback (most recent call last):
  File "bin/myscript", line 2, in <module>
    from mypackage import core
ImportError: No module named mypackage
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Sve*_*ach 6

通常,setup.py应该将软件包安装在 Python 解释器可以找到的地方,这样安装后就import mypackage可以工作了。为了便于bin直接从开发树中运行脚本,我通常只需将一个 simlink 添加../mypackage/bin目录中。当然,这需要一个支持符号链接的文件系统……

  • 不要在开发中使用“聪明的”符号链接,而是使用 [virtualenv](http://pypi.python.org/pypi/virtualenv/) 并运行 `python setup.py develop` 让 distutils 在你的路径中安装可执行文件(当您激活该 virtualenv 时) (7认同)