如何使用setuptools或distutils分发脚本而不是Python包?

时间:2015-07-08 23:20:01

标签: python setuptools distutils

过去,我见过的distutilssetuptools的大多数教程似乎都是为了分发所谓的“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> ...

我的问题:由于这个项目是一个命令行脚本而不是一个可导入的包,在这种情况下如何调用setuptools setup()函数?如何选择setup()的输入参数,以便让它知道它应该将myscript.py视为可执行脚本(例如,它意味着在安装过程中它知道chmod 755 myscript.py ),同时还要明确附带的submodule.py文件,尽管不是脚本本身,但仍然需要在同一目录中myscript.py附近安装的依赖项?在这种情况下setup函数的正确形式是什么?

1 个答案:

答案 0 :(得分:1)

您应该使用setuptools入口点,pip install pkg将为您创建bin/脚本。当您执行系统范围的软件包安装时,脚本将转到/usr/bin/usr/local/bin

About entry points