题
我有一个简单的蟒蛇的应用程序,我的目录结构如下:
- 项目/
- main.py
- config.py
- 插件/
- plugin1
- plugin2
- ...
Config.py 仅载荷配置文件,它不含有任何构造信息的本身。
我现在要分发的这个程序,我想我会使用设置工具做到这一点。文件用户预期使用main.py,因此,一个明确的进入/usr/bin和其他文件的进入/usr/share/项目。
但有一个问题:我会以某种方式需要告诉main.py 看看config.py 在分享目录。但是我真的不能确定确切的分享目录是因为,要设置工具,对吗?
什么是最佳做法时分发蟒蛇的基础的应用程序?
解决方案
设置工具 安装您的包裹在一位置,这可从python即你可以将它导:
import project
问题提出的,当你做的相对进口而不是绝对进口。如果你的 main.py
进口 config.py
它的工作因为他们生活在同一个目录。当你移动你的 main.py
另一位像 /usr/bin
或者另一个位置存在 路径 环境变量,python试图进口 config.py
从 sys.path
而不是从你的包dir。该方案是使用绝对进口:
from project import config
现在 main.py
是"动".
另一个解决方案,这是我喜欢,是使用自动剧本创作提供的 设置工具.
而不是有你的代码中
if __name__ == "__main__":
# here all your beautiful code
发言,把你的代码中的一个功能(主要可能是一个很好的名称):
def main():
# put your code here
if __name__ == "__main__": # not needed, just in case...
main()
现在你的修改 setup.py
:
setup(
# ...
entry_points = {
"console_scripts": [
# modify script_name with the name you want use from shell
# $ script_name [params]
"script_name = project.main:main",
],
}
)
这就是全部。之后安装 设置工具 将创建一个包装脚本,这是可调用,从壳体和电话你的主要功能。现在 main.py
可以住在你的项目目录,你不再需要的移动它 bin/
目录。注意, 设置工具 会自动把这个脚本 bin/
目录相对于安装的前缀。
es.
python setup.py install --prefix ~/.local
安装项目包
~/.local/lib/python<version>/site-packages/<package_name>
和你的脚本
~/.local/bin/<script_name>
所以要确定 ~/.local/bin
存在于你的 路径 env.
更多信息: http://peak.telecommunity.com/DevCenter/setuptools#automatic-script-creation