Python shebang和换行符

时间:2012-10-03 17:17:38

标签: python bash shebang

要在Linux和bash上使Python脚本可执行,可以使用shebang

#! /usr/bin/env python

作为脚本的第一行。如果这一行恰好以Windows风格的换行符\ r \ n(回车符换行)结束,而不是Unix样式的换行符\ n,则bash将无法通过Python解释器运行脚本。 / p>

我正在使用Python进行跨平台开发。当我在Windows中工作时,自然换行是\ r \ n。当我在Linux中工作时,自然换行是\ n。鉴于我使用Mercurial进行版本控制,在包含shebang的脚本文件中强制使用\ n换行符的最佳方法是什么?

3 个答案:

答案 0 :(得分:4)

常见的方法不是自己生成外包装脚本,而是在setup.py中指定它们,并在包安装过程中生成它们。

如果您执行以下操作:

setup(
    entry_points = {
        "console_scripts": [
            "script_name": "your.module.name:main",
        ],
    }
)

...然后,在安装时,将生成并安装名为script_name的包装器,并进行适当配置以在当前平台(shebang line和all)上运行。这使得使用中的行尾字符没有实际意义。

答案 1 :(得分:1)

此问题对于在非本机平台上开发的所有脚本都很常见,而不仅仅是Python。大多数SCM具有自动行结束转换功能。 Mercurial可以做到这一点,但它不是默认值。请参阅EOL Extension

答案 2 :(得分:0)

您可能需要检查EolExtension

使用EolExtension,您可以为您的存储库强制执行某一行结尾。提交不同行结尾的文件会自动转换。