分发Python脚本时不带.py扩展名

7
如果我在Python中编写一个要分发的包,并将一些脚本放置在setup.pyscripts中作为可执行文件,是否有标准方法使它们不具有*.py扩展名?仅仅制作没有.py扩展名的文件是否足够?还是需要额外的操作?从文件名中删除.py会破坏与Python工具(如setup.py/distutils等)相关的任何功能吗?谢谢。

3
你试过了吗?我用setuptools做过类似的事情,效果非常好......你也可以试试——安装你的模块,看看distutils是否替换了你特定Python版本的shebang,例如#!/usr/bin/python27或类似的东西。请尝试一下。 - mgilson
3个回答

2

.py扩展名只在您想要导入模型时才是必需的。请记住,pipeasy_install等工具只是带有shebang的可执行文件。唯一依赖文件扩展名进行执行的操作系统是Windows。


1
如果您需要兼容Windows,则不要删除.py扩展名,或者使用setuptools的entry_points选项,该选项会自动生成适用于系统的脚本文件,例如,要将pip.main()函数安装为脚本,在setup.py中指定pip即可。
  entry_points=dict(console_scripts=['pip=pip:main', 
          'pip-%s=pip:main' % sys.version[:3]]),

即使您不需要Windows兼容性,使用entry_points是有意义的,因为它会为您生成指向特定python解释器的正确shebang(通用的#! /usr/bin/env python是错误的)。

0
如果脚本是要在命令行中执行的,.py扩展名实际上对你来说没有任何作用。脚本将在以下两种情况下使用Python解释器执行:
  1. 您在命令行显式地指定执行: $ python nameofyourscript
  2. 您在脚本顶部包含了一个指向Python的shebang,推荐使用的版本是#!/usr/bin/env python
通过在每个脚本中包含shebang,您可以随意命名文件。
如果不执行这些操作之一,脚本将被作为一个普通脚本执行,适用于您使用的任何shell。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接