分发不带.py扩展名的Python脚本
如果我正在用Python编写一个分发包,并且我在分发不带.py扩展名的Python脚本,python,package,setuptools,distutils,distutils2,Python,Package,Setuptools,Distutils,Distutils2,如果我正在用Python编写一个分发包,并且我在setup.py的scripts中放置了一些脚本作为可执行文件,那么有没有一种标准方法使它们不具有*.py扩展名?仅仅创建没有.py扩展名的文件就足够了吗,或者需要额外的东西吗?从文件名中删除.py会破坏与Python工具(如setup.py/distutils等)相关的任何功能吗?谢谢。只有在您想要导入AFAICT模型时才需要.py扩展名。请记住,pip、easy\u install等等都是可执行文件,上面有shebang。唯一依赖文件扩展名执行
setup.py
的scripts
中放置了一些脚本作为可执行文件,那么有没有一种标准方法使它们不具有*.py扩展名?仅仅创建没有.py扩展名的文件就足够了吗,或者需要额外的东西吗?从文件名中删除.py会破坏与Python工具(如setup.py
/distutils等)相关的任何功能吗?谢谢。只有在您想要导入AFAICT模型时才需要.py
扩展名。请记住,pip
、easy\u install
等等都是可执行文件,上面有shebang。唯一依赖文件扩展名执行的操作系统是Windows。如果脚本是从命令行执行的,则扩展名.py实际上对您没有任何帮助。脚本将在两种情况下使用Python解释器执行:
您明确地说要在命令行执行此操作:$python nameofyourscript
您明确地说,要做到这一点,需要在脚本顶部包含一个指向Python的shebang。首选的版本是#/usr/bin/env python
通过在每个脚本中包含一个shebang,您可以根据需要为文件命名
如果不执行这些操作之一,脚本将作为普通脚本执行,适用于您正在使用的任何shell。如果您需要Windows兼容性,则不要删除.py
扩展名,或者使用setuptools的入口点
选项自动生成适合系统脚本文件,例如。,要将pip.main()
函数作为脚本安装,pip
在setup.py
中指定:
entry_points=dict(console_scripts=['pip=pip:main',
'pip-%s=pip:main' % sys.version[:3]]),
即使您不需要Windows兼容性,也可以使用入口点
,因为它为您生成指向特定python解释器的正确shebang(其中generic!/usr/bin/env-python
是错误的)。您尝试过吗?我用setuptools
做过类似的事情,效果很好。。。试一试——安装您的模块,看看distutils
是否用特定python中的shebang替换了shebang。e、 g.#/usr/bin/python27
或类似的东西。。。