如何处理在安装脚本中有 shebang 行的脚本?

How to deal with a script which has shebang line in setup script?

我的分发源结构如下:

|project
    |setup.py
    |project.py
    |package
        |__init__.py
        |code.py

project.py 是主要脚本,它有 shebang 行

我是否应该以某种方式在 setup.py 中定义上述事实?

您需要查看设置工具 console_scripts entry point

假设您的 project.py 当前包含如下内容:

if __name__ == '__main__':
    run_proj()

您需要先移动 project.py 目录中 package 才能从 setup.py 引用它。然后,使用 console_scripts 入口点注册 run_proj 函数,如下所示:

setup.py

setup(
    # other arguments here...
    entry_points={
        'console_scripts': [
            'run-proj = package.project:run_proj',
        ],
    }
)

之后,您需要重新运行 setup.py,例如python setup.py develop,或者您在开发过程中使用的任何方法。

然后你会得到一个调用run_proj()bin/run-proj脚本,可以从命令行调用。 (如果您将软件包安装在虚拟环境中,它将位于 venv/bin/run-proj 中,或者如果您在系统范围内安装它,则位于 usr/local/bin/run-proj 之类的位置,具体取决于您的 OS / 发行版)。

该脚本实际上应该在您的路径上,因此您应该能够从 shell.

运行 run-proj

此时,shebang 行不再是必需的,您可以将其删除(bin/run-proj 将有一个自动生成的 shebang 指向正确的 Python 解释器)。