【问题标题】:python: why is user script directory shared across python versions?python:为什么用户脚本目录在 python 版本之间共享?
【发布时间】:2018-10-30 10:36:38
【问题描述】:

来自PEP-370

用户脚本目录

二进制文件和脚本的目录。 [10] 它在 Python 版本和脚本的目标目录之间共享。

Unix(包括 Mac)

  ~/.local/bin

窗户

  %APPDATA%/Python/Scripts

为什么它建议特定于版本的用户站点目录而不是用户脚本目录?那么来自不同python版本的脚本不会相互冲突吗?

编辑。是的,他们会的。我用python2-pytestpython3-pytest 做了一个测试。使用 pip 将两者都安装到用户目录时,一个 pytest 脚本会在没有警告的情况下覆盖另一个脚本。

似乎有一个相关链接,但它已经死了:

关于bin目录http://permalink.gmane.org/gmane.comp.python.devel/91095的讨论

【问题讨论】:

标签: python pep


【解决方案1】:

shell 不支持每个 Python 版本的二进制文件。命令行可执行文件只有一个命名空间,使用PATH 列出的目录中的第一个名称。

~/.local/bin 目录的意义在于它被添加到了PATH 环境变量中,并且脚本和其他可执行文件被放在那里供命令行使用。而且由于此类可执行文件只有一个命名空间,因此在这里将命令放入每个版本的目录是没有意义的。

相反,由项目为您提供版本控制的可执行文件。 pip 项目在与 Python X.Y 一起安装时使用 setup.py configurationpippipXpipX.Y 脚本,因此当有多个 Python 版本时,您将始终拥有更具体的脚本版本。您还可以将模块用作带有pythonX.Y -m pip 的脚本。许多 Python 命令行工具都有类似的支持。

至于丢失的GMane链接(还是available on the web archive);还有其他关于 Python-dev 讨论的档案仍然可用,例如 this grokbase.com rendering of the same post;该讨论是关于将脚本放置在哪个目录中,~/bin~/.local/bin,而不是关于每个 Python 版本的目录。

【讨论】:

  • 比较 ~/.local/bin/usr/bin 听起来是有效的。但是/usr/bin 通常由系统包管理器管理,而~/.local/bin 运行狂野。我刚刚用python2-pytestpython3-pytest 进行了测试。一个pytest 脚本会在没有警告的情况下覆盖另一个脚本。所以我认为pythonX.Y -m 是这种情况下的救援。但是考虑到其他程序安装到像~/.gem/ruby/1.9.1/bin 这样的路径中,如果有一天python 使用类似的方法可能会很好。无论如何,~/.local/bin 没有包管理器。最好由用户自己决定链接的内容。
  • 你应该比较 ~/.local/bin/usr/local/bin,真的,因为两者都不属于系统包管理器的职责。 Python 有 virtualenv 和 Pipenv 来管理每个项目的依赖关系,其中 Pipenv 知道如何根据需要重用 virtualenvs。这会给你与 Gem 类似的行为。毕竟,创建~/.gem 目录的不是 Ruby。
  • 是的,这更准确,但/usr/local/bin 通常具有 root 权限,因此不太可能搞砸。 virtualenv 实际上提供了最好的隔离,但是您必须在每次使用之前激活,这对于常用命令来说是可怕的。如果一个包安装了多个版本的python,我最好忽略~/.local/bin并使用pythonX.Y -m。希望有一天他们会这样做~/.python/X.Y.Z/bin
  • @Cyker:您不必激活 virtualenv。您可以将 virtualenv 管理的 /bin 目录添加到您的路径中,或者将脚本符号链接到您路径上的目录中。
  • (Gem 所做的是选择您的 PATH 上的哪个 ~/.gem/ruby/*/bin 目录,仅此而已,这将您限制为 为所有工具提供一个 ruby​​ 版本。Gem / Ruby 与 Python / virtualenv / Pipenv 做了不同的权衡。
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2021-07-28
  • 1970-01-01
  • 2014-10-18
  • 2011-04-27
相关资源
最近更新 更多