使用入口点定义的命令强制 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 脚本

在 AWS Elasticbeanstalk 中执行 python 入口点命令时如何包含命令?

找不到 Python 入口点“console_scripts”