【问题标题】:Python System ConfigurationPython系统配置
【发布时间】:2018-01-07 13:34:00
【问题描述】:

tldr: 如何在 Mac 上设置 Python?在我开始破坏它之前,是否有大量毫无意义的抄袭?

我希望获得有关 Mac 上 Python 系统架构的一些指导(也许答案与操作系统无关,但为了安全起见,我假设它不是)。

我可以运行各种似乎的命令来为我提供多个 Python 二进制文件。事实上,可能还有更多这正是我迄今为止所遇到的。

  1. ls /usr/local/bin/ | grep 'python\|pyd'

pydoc pydoc2 pydoc2.7 python python-32 python-config python2 python2-32 python2-config python2.7 python2.7-32 python2.7-config pythonw pythonw-32 pythonw2 pythonw2-32 pythonw2.7 pythonw2.7-32

  1. ls /usr/bin | grep 'python\|pyd'

pydoc pydoc2.6 pydoc2.7 python python-config python2.6 python2.6-config python2.7 python2.7-config pythonw pythonw2.6 pythonw2.7

  1. ls /Library/Frameworks/Python.framework/Versions/

2.7 Current

  1. ls /System/Library/Frameworks/Python.framework/Versions/

2.3 2.5 2.6 2.7 Current

至于执行.py时运行的是哪一个;当我运行which python 时,我回来了

/Library/Frameworks/Python.framework/Versions/2.7/bin/python

当我使用 REPL 时,这似乎是一致的。与此安装相关的 site-packages 可用(不是我修改了其他站点包位置)

我没有对我的 Mac 上的 python 环境进行任何重大修改,所以我假设这是开箱即用给用户的。如果有人了解所有这些二进制文件如何组合在一起以及它们为何存在,请告诉我。如果答案是 RTM,请简单地将我指向一个页面,因为 https://docs.python.org/2/using/mac.html 不够。

感谢你让我变得更聪明!

规格: Mac 操作系统:10.12.5

【问题讨论】:

  • 您的问题到底是什么?你想知道每一个命令的作用吗?
  • 我的秘诀:(1)始终使用brew install python,切勿使用系统Python(如/usr/bin/python*)进行开发工作。 (2) 始终创建一个 virtualenv,永远不要将 pip install 东西放入解释器的环境中。在我的机器上,我看不到您提到的 Python 解释器的激增。拥有多个解释器对于测试很有用,但请参见上文。
  • @jwodder 我想知道 1.) 如果您有相同的设置,其中(在“原始”机器上)python 二进制文件有多个位置。 2.) 如果是这样,为什么以及它们是否用于某种编排,或者它们真的只是副本?我知道这可能很多,如果您知道文档中解释它们在每个操作系统上的拱门的部分,我将不胜感激。
  • @9000 很高兴知道破坏我的机器可能是我自己的愚蠢行为。我发布的哪个路径呈现“没有这样的文件或目录”?我完全同意 envs 的虚拟化,而且看起来我的开发工作将来可能更适合 python,我可能会听取你的建议。

标签: python macos operating-system config


【解决方案1】:

免责声明:我对现代 macOS 知之甚少。

/System/Library/Frameworks/Python.framework/Versions/2.*/ 下的所有文件似乎都是相同的文件。也就是说,下面显示了 3 个相同的校验和:

md5 /System/Library/Frameworks/Python.framework/Versions/2.{3,5,6}/bin/python

我想它适用于假定特定早期 Python 版本可用的 macOS 应用程序。它们都被赋予相同的 2.6.9,这是 2.6 的最后一个版本。 2.x/lib 都包含 python2.6 子目录和 .py* 文件,看起来也相同:

md5 /System/Library/Frameworks/Python.framework/Versions/2.{3,5,6}/lib/python2.6/threading.pyc

我不知道所有这些文件是否都是指向相同字节的硬链接,但似乎很有可能。所有的口译员似乎都一样:

$ find /System/Library/Frameworks/Python.framework/Versions/2.{3,5,6}/bin/* \
  -samefile /System/Library/Frameworks/Python.framework/Versions/2.6/bin/python

/System/Library/Frameworks/Python.framework/Versions/2.3/bin/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.5/bin/python2.6
/System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6

Python 2.7 是唯一维护的 2.x 版本,因此它是独立的并且可能会收到更新。

【讨论】:

  • 谢谢!超级有用的数据。
【解决方案2】:

要回答您关于为什么 Python 有各种不同的可执行文件的更广泛的问题,

  • python 是基本的命令行界面 Python 可执行文件。
  • pythonw 用于运行“无头”Python 程序,无需提供终端输出。对于不应打开控制台窗口的基于 GUI 的 Python 程序,这种独特的可执行文件在 Windows 上尤其必要,因此得名。
  • python-config 脚本的存在只是为了向寻求编译或链接到特定 Python 二进制文件的程序提供配置信息,例如在创建 Python 扩展模块时(我相信在 OSX 上是 .pyd 文件)
  • pydoc 从 Python 脚本文件中提取文档信息,例如从与特定类和函数关联的文档字符串中。

更多关于pythonpythonw 的区别:https://stackoverflow.com/a/30313091/1234300

除此之外,您还有一些特别标记为 python-32 等的版本。这些将是 32 位版本,而 64 位可能是您系统上的其他版本。有时您可能想要使用 32 位版本的 Python,因为您想要链接到其他 32 位代码,包括 Python 扩展或其他共享库。

【讨论】:

  • 很棒的答案!谢谢!
  • 有任何线索说明它们为何同时存在于 usr/bin 和 usr/local/bin 中?
  • 解释我对 POSIX 标准的理解,/usr/bin 应该是作为操作系统一部分的可执行文件(或由操作系统管理的包),而 /usr/local/bin 应该是对于在您的特定机器上本地安装的可执行文件,由您作为该机器的系统管理员进行管理。如果您同时拥有both,则表明您可能安装了两个(或更多!)Python 副本;在这种情况下,要非常小心,你知道你正在使用哪一个,以及是否是你想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多