不带 .py 扩展名分发 Python 脚本
如果我在用Python写一个要发布的包,并且我把一些脚本放在setup.py
里的scripts
部分,是否有标准的方法让它们不带*.py的后缀?只要把文件名改成没有.py后缀就可以了吗,还是需要做其他的事情?把文件名中的.py去掉会不会影响到像setup.py
或distutils这些Python工具的功能?谢谢。
3 个回答
0
如果这个脚本是打算在命令行中运行的,那么 .py
这个后缀其实并没有什么特别的作用。脚本会在以下两种情况下被 Python 解释器执行:
- 你在命令行中明确地告诉它这样做:
$ python 你的脚本名
- 你在脚本的最上面加了一个特殊的标记(叫做 shebang),指向 Python。推荐的写法是
#!/usr/bin/env python
。
只要在每个脚本中加上这个特殊标记,你就可以随便给文件起名字。
如果不做这两件事,脚本就会被当作普通的脚本来执行,具体执行方式取决于你使用的命令行环境。
2
.py
这个后缀只有在你想要导入模型的时候才需要用到。记住,像pip
、easy_install
这些其实都是在最上面有一个特殊标记的可执行文件。只有Windows这个操作系统是依赖文件后缀来判断如何执行文件的。
1
如果你需要让你的程序在Windows上运行,那么就不要去掉 .py
这个后缀,或者你可以使用setuptools的 entry_points
选项,这样可以自动生成适合你系统的脚本文件。例如,如果你想把 pip.main()
函数当作一个脚本来安装,pip
在 setup.py
文件中会这样指定:
entry_points=dict(console_scripts=['pip=pip:main',
'pip-%s=pip:main' % sys.version[:3]]),
即使你不需要Windows兼容性,使用 entry_points
也是有道理的,因为它会为你生成正确的开头行,这样就能指向特定的Python解释器(而像 #! /usr/bin/env python
这样的通用写法可能就不对了)。