【问题标题】:Should we gitignore the .python-version file?我们应该 gitignore .python-version 文件吗?
【发布时间】:2019-06-16 07:59:18
【问题描述】:

我有一个 .python-version 文件,当我使用 github 创建一个 Python 存储库并指定它应该有一个 .gitignore 时,它会将 .python-version 文件添加到其中。在我看来,不应忽略该文件,因为在不同机器上运行代码的其他人会想知道他们需要什么版本的 Python。

那为什么是.gitignored?

【问题讨论】:

  • Git 本身不会自动添加.gitignore 文件。所以我怀疑你问的是为什么 GitHub 有这种行为。我的猜测是,默认情况下他们只是排除了所有以. 开头的文件——我知道没有充分的理由忽略.python-version。
  • @DanielPryden:下面的答案说明了一个很好的理由;如果您安装了 Python 3.7.2 但.python-version 文件指出项目所有者使用的是 3.7.1,那么我们都可以在 specific point release bugfixes 之外继续使用这个项目。

标签: python github gitignore pyenv


【解决方案1】:

.python-version 之所以应该被 gitignored 是因为它的版本太具体了。 Python 的小版本(例如 2.7.1 与 2.7.2)通常相互兼容,因此您不想锁定到特定的小版本。此外,许多 Python 应用程序或库应与一系列 Python 版本一起使用,而不仅仅是特定版本。使用 .python-version 表示您希望其他开发人员使用精确、特定的 Python 版本,这通常不是一个好主意。

如果您想指明所需的最低 Python 版本或版本范围,那么我认为在 README 中记录是更合适的解决方案。

【讨论】:

    【解决方案2】:

    虽然过于具体,但您仍然可以对该文件进行版本控制(意思是:不将其包含在默认 .gitignore 中),如:

    • 它只会被pyenv使用
    • 是对README的一个很好的补充,为了说明具体项目推荐什么版本的python,
    • 它可以很容易地被覆盖(如果您使用pyenv),或者简单地忽略(如果您没有pyenv)。

    正如文章“How to manage multiple Python versions and virtual environments ”所说:

    当设置一个使用 Python 3.6.4 的新项目时,pyenv local 3.6.4 将在其根目录中运行。
    这将设置版本,并创建一个.python-version 文件,以便其他贡献者的机器可以获取它。

    但是:

    pyenv 按优先顺序查看四个位置来决定使用哪个版本的 Python:

    1. PYENV_VERSION 环境变量(如果指定)。
      您可以使用 pyenv shell 命令在当前的 shell 会话中设置此环境变量。
    2. 当前目录中特定于应用程序的.python-version 文件(如果存在)。
      您可以使用pyenv local 命令修改当前目录的.python-version 文件。
    3. 通过搜索每个父目录找到第一个 .python-version 文件(如果有),直到到达文件系统的根目录。
    4. 全局版本文件。您可以使用pyenv global 命令修改此文件。
      如果全局版本文件不存在,pyenv 假定您要使用“系统”Python。 (换句话说,如果pyenv 不在您的PATH 中,则可以运行任何版本。)

    【讨论】:

      【解决方案3】:

      先生,我认为您的问题的答案是 YES。我刚刚打开 GitHub 官方 repo 并检查了项目gitignore。

      它显示了那里提到的 .python-version 文件。

      如果它没有被忽略,您可以简单地检查提及的正确方式。

      【讨论】:

      • -1,这并没有回答问题的“为什么”部分,也没有真正添加任何 OP 尚未知道并在问题中指定的信息。
      【解决方案4】:

      使用 python 虚拟环境时也可能会出现一些问题,因为人们可能希望使用不同于 3.7.2/envs/myvenv 的虚拟环境名称。

      【讨论】:

        【解决方案5】:

        旧帖子,但仍然相关。

        我的回答是“视情况而定”。

        虚拟环境的名称也可以在 .python-version 中使用,如果它是在 pyenv 的 virtualenv 插件的帮助下管理的。这使得该文件非常无用,因为该项目是在公共 Git 存储库上管理的,您可以将其排除在外(但不这样做是无害的,正如其他答案中所说的那样)。

        但是(我就是这种情况)如果您在私人仓库上管理项目并共享虚拟环境,那么不将其从 Git 中排除是有意义的。这允许您在项目的实验分支上使用不同的环境(包括 Python 版本)。当然,fork 或克隆原始项目并在副本中试验新的环境会干净得多,但有时只创建一个新分支会更容易。

        在一天结束时,恕我直言,这个问题没有通用答案,这取决于您的工作流程。

        【讨论】:

          猜你喜欢
          • 2017-10-12
          • 1970-01-01
          • 2023-03-07
          • 2020-11-19
          • 1970-01-01
          • 2021-12-28
          • 2020-04-07
          • 2018-11-24
          相关资源
          最近更新 更多