4

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

#! /usr/bin/env python

作为脚本的第一行。如果此行恰好以 Windows 样式的换行符 \r\n(回车 - 换行符)而不是 Unix 样式的换行符 \n 结尾,那么 bash 将无法通过 Python 解释器运行脚本。

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

4

3 回答 3

5

常见的方法是根本不自己生成外包装脚本,而是在你的指定它们setup.py并让它们在包安装期间生成。

如果您执行以下操作:

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

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

于 2012-10-03T18:01:43.990 回答
1

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

于 2012-10-03T17:51:01.497 回答
0

您可能需要检查EolExtension

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

于 2012-10-03T17:50:49.297 回答