分发没有.py扩展名的Python脚本

时间:2013-01-30 03:12:19

标签: python package setuptools distutils distutils2

如果我正在用Python编写一个用于分发的包,并且我将一些脚本视为scripts setup.py中的可执行文件,是否有一种标准方法可以使它们不具有* .py扩展?仅仅制作没有.py扩展名的文件,还是需要额外的东西?是否会从文件名中删除.py,这会破坏与setup.py / distutils等Python工具相关的任何功能?感谢。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

如果您需要Windows兼容性,则不要删除.py扩展名或使用自动生成适用于系统脚本文件的setuptools'entry_points选项,例如,安装pip.main()功能作为脚本,pipsetup.py中指定:

  entry_points=dict(console_scripts=['pip=pip:main', 
          'pip-%s=pip:main' % sys.version[:3]]),

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

答案 2 :(得分:0)

如果要从命令行执行脚本,.py扩展名实际上不会为您执行任何操作。该脚本将在两种情况下使用Python解释器执行:

  1. 您明确表示要在命令行执行此操作:$ python nameofyourscript
  2. 你明确表示这样做是通过在指向Python的脚本顶部包含一个shebang来实现的。首选版本为#!/usr/bin/env python
  3. 通过在每个脚本中包含一个shebang,您可以将文件命名为任意内容。

    如果不执行其中一项操作,脚本将作为正常脚本执行,适用于您正在使用的任何shell。