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

时间:2013-01-02 06:47:40

标签: python macos path installation uninstall

在过去几年中,我已经安装了许多带有各种Python版本的Python库。为了让它们立即工作,我盲目地安装它们而没有控制。目前,当我尝试安装调用numpy,scipy和matplotlib的pynest时,它们会导致问题。经过努力,我将清理并重新安装Python和库。

经过调查,我在我的系统上找到了Python 2.5 / 2.6 / 2.7 / 3.2,并且每个都有一些副本或其他东西:(我的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有时候;
  • 有时编译源代码;

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

5 个答案:

答案 0 :(得分:26)

为什么搞砸了?

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

它会导致什么问题?

我完全不知道。我想问题是如果你有许多版本的python,那么使用哪一个以及在哪里查找包将分别由系统PATHPYTHONPATH中的路径顺序决定。因此您可能无法控制安装python模块的位置。考虑一下,如果你运行sudo python setup.py install来安装一个模块(它通过root PATH找到python)然后尝试import模块python -c "import it"(这次它发现了python通过你的PATH),也许会出问题。这是我的猜测,我没有验证它。但就我个人而言,确实出了问题。

如何避免这种情况?

我认为原则是要注意不同的方法和工具将事物独立地安装到不同的位置,因此要谨慎使用

  • 除非您打算,否则不要通过不同的方式安装两次相同的东西 方法。 (如果您打算为python执行此操作,则可能需要查看virtualenv
  • 密切关注PATH中的路径顺序并考虑是否存在。{li> 正确。
  • 安装模块时,要清楚哪个是python(或pip) 运行以及安装模块的位置。

那么,我是如何解决自己的情况的呢?

由于它已经搞乱并且似乎很难治愈,所以最后我通过完整的操作系统重新安装解决了这个问题,并开始关注 DOs-和 - DONTs 以上。对于使用python安装科学环境(numpy / scipy / matplotlib,这些问题让我问这个问题),我发现this tutorial非常有帮助。所以,问题终于解决了。

答案 1 :(得分:10)

这让我感到困惑,以及我是如何解决的。

$ 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"

阅读&#39; brew info python&#39;:

中的注意事项部分
==> 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

答案 2 :(得分:8)

为了将python发行版安装到特定文件夹中,可以在python安装期间使用--prefix方案。使用prefix scheme,您可以将Python 2.7安装到文件夹/opt/py27中。现在,为了使用新安装的Python发行版,您必须:清理路径 LD_LIBRARY_PATH

  • 删除所有“旧”Python路径和
  • 配置(根据我的例子)这样的环境变量:
    • 路径:添加/ opt / py27 / bin
    • LD_LIBRARY_PATH:添加/ opt / py27 / lib

就是这样。

(如果您需要同时安装多个Python环境,我建议您查看virtualenv

答案 3 :(得分:1)

这是管理不同python版本的另一个很好的解决方案:

https://github.com/pyenv/pyenv

(我已经在这里提供了答案,但决定将此作为附加或替代答案发布)

答案 4 :(得分:0)

tl;博士
brew install python

症状 我在python程序中找不到相似性时遇到类似的问题。
我的python3版本是损坏的符号链接。
我的点子指向的是python 3.8
我的pip3指向3.9
python -V输出了一些python 2.7版本
python3 -V正在输出某些python3.8版本

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