Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分发不带.py扩展名的Python脚本_Python_Package_Setuptools_Distutils_Distutils2 - Fatal编程技术网

分发不带.py扩展名的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。唯一依赖文件扩展名执行

如果我正在用Python编写一个分发包,并且我在
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
    或类似的东西。。。