如何处理在安装脚本中有 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 解释器)。
我的分发源结构如下:
|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 解释器)。