使用入口点定义的命令强制 python 解释选项
Posted
技术标签:
【中文标题】使用入口点定义的命令强制 python 解释选项【英文标题】:Force options to python interpretion with commands defined using entry points 【发布时间】:2012-10-09 13:08:00 【问题描述】:我想强制使用 python -S 运行脚本,我正在使用 setup.py 中的 entry_points 定义脚本。有这个选项吗?
谢谢!
【问题讨论】:
【参考方案1】:我认为 setuptools 中没有这样的选项。您可以创建一个存根脚本并在 scripts
distutils 选项中指定它。基于Is it possible to set the python -O (optimize) flag within a script?:
#!/usr/bin/env python
from your_package.script import main
if __name__=="__main__":
import os, sys
sentinel_option = '--dont-add-no-site-option'
if sentinel_option not in sys.argv:
sys.argv.append(sentinel_option)
os.execl(sys.executable, sys.executable, '-S', *sys.argv)
else:
sys.argv.remove(sentinel_option)
main()
【讨论】:
这似乎是一个很好的解决方法,我会检查是否有效地没有这样的选项将其标记为答案。 我刚刚发现使用“脚本”而不是 entry_points setuptools 将保持 shebang,然后我可以在第一行放置一个 #!/usr/bin/python -S最终脚本也是如此。 @JorgeEduardoCardona: shebang 是一个不错的选择,但如果你用显式解释器python path/to/script
调用脚本,它就不起作用,它不允许-S
和/usr/bin/env python
,它赢了除非安装了pylauncher,否则不能在Windows上工作(它可能支持shebang中的选项)
不仅如此,我刚刚意识到,如果我有 -S,那么 setuptools 生成的代码将无法工作,因为它使用了标准库中没有的 pkg_resources。我正在关注 setuptools 的代码,特别是第 1800 行的 easy_install.py 代码,其中定义了函数 get_script_args 但我认为没有办法很好地做到这一点。以上是关于使用入口点定义的命令强制 python 解释选项的主要内容,如果未能解决你的问题,请参考以下文章
如何使用更改的入口点(sys.path)在 Python 中导入文件?
有没有办法将命令行参数传递给自定义入口点(C / C ++)
Google App Engine:在 Python 中使用自定义入口点
使用 argparser 将参数传递给入口点 python 脚本