组织python项目时,这种结构似乎是一种标准的方式:
myproject\
bin\
myscript
mypackage\
__init__.py
core.py
tests\
__init__.py
mypackage_tests.py
setup.py
我的问题是,如何导入mycore.py以便我可以在myscript中使用它?
两个__init__.py
个文件都是空的。
myscript的内容:
#!/usr/bin/env python
from mypackage import core
if __name__ == '__main__':
core.main()
core.py的内容
def main():
print 'hello'
当我从myproject目录中运行myscript时,出现以下错误:
Traceback (most recent call last):
File "bin/myscript", line 2, in <module>
from mypackage import core
ImportError: No module named mypackage
我错过了什么?
答案 0 :(得分:4)
通常,setup.py
应该将软件包安装在Python解释器可以找到的位置,因此安装后import mypackage
将起作用。为了便于在开发树中运行bin
中的脚本,我通常只需将../mypackage/
的simlink添加到bin
目录。当然,这需要一个支持符号链接的文件系统......
答案 1 :(得分:0)
我不确定是否有“最佳选择”,但以下是我的常规做法:
放入我想在/ bin
在dir myproject中执行“python -m bin.script”
在script.py中导入时,请考虑script.py以root身份进行的目录。所以
from ..mypackage import core
如果系统支持符号链接,那么它是更好的选择。
答案 2 :(得分:0)
我通常将我的bin路径添加到$ PYTHONPATH中,这将使python也可以在bin目录中查找要求的模块。
export PYTHONPATH=/home/username/bin:$PYTHONPATH
$ python
import module_from_bin
答案 3 :(得分:0)
我解决了setuptools specifications之后的问题。
在setup.py 中,您可以指定模块 as an argument for the function setup()
:
packages = find_packages()
找到所有模块。
p.s。您必须导入以下功能:from setuptools import setup, find_packages