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

标签 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 函数的正确形式是什么?

最佳答案

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

About entry points

关于python - 我如何使用 setuptools 或 distutils 来分发脚本而不是 Python 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31305507/

相关文章:

python - 尝试使用设置样式线时出现 GNUplot 4.2 语法错误

python - Pymysql DictCursor 返回列表而不是字典

python - 使用一个 DataFrame 中的列作为另一个 DataFrame 中的多索引进行 t 检验

python - Python 中是否有等效的 NODE_ENV

python - 默认情况下,setuptools 是否总是安装在 Python 中?

python - distutils - 如何在同一模块中获取扩展模块和 python 模块?

python - 从导入的函数打开文件

python - 安装的模块是空的

python - 将输出文件添加到 Python 扩展

python-3.x - 如何 Pandas 对具有其中一列作为版本号的数据框进行排序?