我的系统上有太多不同的 Python 版本,导致了很多问题

在过去的几年中,我已经安装了许多具有不同 Python 版本的 Python 库。为了使它们能立即投入使用,我盲目地不加控制地安装了它们。目前,当我试图安装调用 numpy、 scypy 和 matplotlib 的 Pynest时,它们引起了问题。在挣扎之后,我将清理并重新安装 Python 和库。

经过调查,我在我的系统上找到了 Python 2.5/2.6/2.7/3.2,它们每个都有一些副本或其他东西在: (my OS = = Mac OS X 10.7.5 Lion)

  • /Library/Frameworks/
  • /opt/local/Library/Frameworks/
  • /opt/local/bin/
  • /Applications/
  • /usr/local/bin/
  • /usr/bin/
  • /System/Library/Frameworks/

我知道我有这些东西很疯狂。现在我已经删除了所有这些除了在 /System/Libarary/Frameworks的东西(我从来没有删除任何东西从 /System/Library/)。干净的工作之后,which python现在给 /usr/bin/python链接到 /System/Library/Frameworks

现在,重新安装 python 的环境是否清晰?如何再次检查是否存在其他版本?我应该如何重新安装它们,以保证它们和它们的库不会到处都是,并且还有许多副本?

我想在一个合适的位置安装一个干净的 Python 2.7,让我的系统知道它的确切位置,并且永远不要在其他地方安装任何库。请给我一些建议,如何以专业的方式管理它。

告诉你,这是我目前的 $PATH,我认为它应该被修改:

/opt/local/bin:/opt/local/sbin:/opt/nest/lib/python2.7/site-packages:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages/django/bin:/usr/X11/bin:/opt/local/bin:/opt/local/sbin:/usr/local/lib/python2.7/site-packages:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.2/bin

如果你需要更多的信息,请告诉我。谢谢!


更新 :

我深刻地反思为什么它变得如此疯狂,我相信这是因为我通过以下方式安装了东西:

  • 有时 easy_install/macports/homebrew/fink/pip;
  • 有时 .dmg;
  • 有时 .pkg;
  • 有时编译源代码;

他们在不同的地方制造东西。我想知道这些方式背后的机制是什么?他们如何选择目标位置?如何防止他们把事情搞砸?

90387 次浏览

为了将一个 python 发行版安装到特定的文件夹中,您可以在 python 安装期间使用 --prefix方案。例如,可以使用 前缀计划将 Python 2.7安装到文件夹 /opt/py27中。现在,为了使用新安装的 Python 发行版,您必须: 清理现场路径LD _ Library _ PATH:

  • 删除所有’旧’Python 路径和
  • 像下面这样配置环境变量:
    • PATH: 添加/opt/py27/bin
    • LD _ LIBRARY _ PATH: 添加/opt/py27/lib

就是这样。

(如果您需要同时安装多个 Python 环境,我建议您查看一下 虚拟世界)

为什么会搞砸?

正如 OP 的更新所说,安装 Python 有几种不同的方式,它们将文件定位在不同的位置。例如,macports将事物放入 /opt/local/,而 homebrew将事物放入 /usr/local/。此外,Mac OS X 自带了一些 Python 版本。因此,如果您通过不同的方式多次安装 python,您将在您的系统上 获得独立存在的许多 Python 版本

会引起什么问题?

我也不清楚。我猜想问题在于,如果您有多个 Python 版本,那么使用哪个版本以及在哪里查找包将分别由系统 PATHPYTHONPATH中的路径顺序决定。因此,您可能无法控制在何处安装 python 模块。假设您运行 sudo python setup.py install来安装一个模块(它通过根目录的 PATH找到 python) ,然后尝试通过 python -c "import it"找到模块的 import(这次它通过 PATH找到 python) ,可能会出错。这是我的猜测,我没有验证它。但就我而言,确实出了问题。

如何避免这种情况?

我认为原则是 要意识到不同的方法和工具可以独立安装到不同的位置,所以要谨慎使用它们

  • 除非您打算这样做,否则不要通过不同的方式安装相同的东西两次 (如果您打算为 python 做这件事,您可能需要查看 virtualenv)
  • 注意你的 PATH的路径顺序,并考虑它是否是 正确。
  • 在安装模块时,清楚哪个 python (或 pip)是 运行和模块的安装位置。

我是怎么解决自己的案子的?

因为它已经搞砸了,而且看起来很难治愈,所以最后我用 重新安装操作系统解决了这个问题,并开始按照上面的 Dos-and-DONT。对于使用 python 安装科学环境(numpy/scipy/matplotlib,它显示了一些问题,让我不禁要问这个问题) ,我发现 本教程非常有帮助。问题终于解决了。

下面是让我困惑的地方以及我是如何解决的。

$ which python
/usr/bin/python


$ which python3
/usr/local/bin/python3


$ ls /usr/local/bin/python
ls: /usr/local/bin/python: No such file or directory

注意,我没有安装了 python2.7的 HomeBrew,但是安装了 python3。/usr/bin/python 下的版本使用系统默认值。根据模块搜索路径可以看出:

$ /usr/bin/python
Python 2.7.10 (default, Feb  7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
`enter code here`Type "help", "copyright", "credits" or "license" for
more information.
>>> import sys
>>> sys.path
['', '/Library/Python/2.7/...

注意“/Library/Python”... 这是 Mac OS 版本的 Python。但是我想严格遵守用户安装的版本(比如 HomeBrew)。

所以我这么做是为了解决这个问题:

$ brew install python
...
Warning: python 2.7.13 is already installed, it's just not linked.
You can use `brew link python` to link this version.


$ brew link --overwrite python


$ which python
/usr/local/bin/python


$ python
Python 2.7.10 (default, Feb  7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/Cellar/python/2.7.13...

它不再是/Library/. . 而是/usr/local。

现在它发现我所有的 pip 安装模块! 问题解决了!


更新:

在将 brew 更新到版本1.5.4之后,似乎删除了符号链接。现在你必须把这个加到你的路径上:

export PATH="/usr/local/opt/python/libexec/bin:$PATH"

阅读“酿造信息巨蟒”中的警告部分:

==> Caveats
This formula installs a python2 executable to /usr/local/bin.
If you wish to have this formula's python executable in your PATH then add
the following to ~/.bash_profile:
export PATH="/usr/local/opt/python/libexec/bin:$PATH"


Pip and setuptools have been installed. To update them
pip2 install --upgrade pip setuptools


You can install Python packages with
pip2 install <package>


They will install into the site-package directory
/usr/local/lib/python2.7/site-packages


See: https://docs.brew.sh/Homebrew-and-Python.html

博士
brew install python

我在 Python 程序没有找到依赖项时也遇到过类似的问题。
我的 python3版本是一个破碎的符号链接。
我的点子指向一条蟒蛇3.8
我的 pip3指向3.9
Python-V 输出了一些 python 2.7版本
Python3-V 正在输出一些 python3.8版本

解决方案
我运行 brew install python,它解决了我所有的问题。