【发布时间】:2015-07-08 23:20:00
【问题描述】:
过去,我看到的大多数distutils 或setuptools 的教程似乎都面向分发所谓的“Python 包”;即密切相关的 Python 模块的集合,它们最终旨在作为一个单元一起导入到其他东西中。
我有一点不同:一个大型命令行脚本。该脚本当前位于一个 Python 项目中,其结构类似于以下内容:
git_repo/
.gitignore
README.rst
src/
myscript.py
sub_module1.py
sub_module2.py
sub_module3.py
test/
test_sub_module1.py
test_sub_module2.py
test_sub_module3.py
在myscript.py 文件中,前几行如下所示:
#!/usr/bin/env python
import sub_module1
import sub_module2
import sub_module3
# Go do a bunch of stuff...
# etc...
各种子模块中包含的代码大部分是我无法想象的想要在另一个项目中重复使用的东西;这些部分都相当特定于主应用程序myscript.py。此外,每个submodule.py 文件内部的材料在一个子模块和另一个子模块之间也没有那么密切相关。总的来说,我认为将它们组合到一个带有自己的__init__.py 文件的子包中并不是特别自然或合乎逻辑的。事实上,我什至首先拥有这些子模块文件的唯一原因只是为了帮助更干净地组织主脚本;这样做会导致顶级 myscript.py 文件出现 100 行,而不是全部堆积成一个巨大的 1000 行滚动。
在我的git_repo/src 目录中,我可以通过在命令行中输入来执行此脚本,例如:
./myscript.py --opt1 <value_1> --opt2 <value_2> --opt3 <value_3> ...
我的问题:既然这个项目是一个命令行脚本而不是一个可导入的包,那么在这种情况下我应该如何调用setuptoolssetup()函数呢?如何选择setup() 的输入参数,以便让它知道它应该将myscript.py 视为可执行脚本(例如,它知道在安装期间执行chmod 755 myscript.py),同时也明确随附的submodule.py 文件虽然不是脚本本身,但仍然是必需的依赖项,应该在同一目录中与myscript.py 相邻安装?在这种情况下,setup 函数的正确形式是什么?
【问题讨论】:
标签: python setuptools distutils