我的系统造成的问题太多不同Python版本(Too many different Python ve

2019-07-17 18:01发布

在过去几年中,我已经安装了各种版本的Python许多Python库。 为了让他们准备立即开始工作,我盲目地安装它们没有控制。 目前,当我试图安装他们造成的问题pynest它调用numpy的,SciPy的和matplotlib。 挣扎后,我要清理并重新安装Python和图书馆。

经过调查,我发现Python的2.5 / 2.6 / 2.7 / 3.2我的系统上,和他们每个人都有一些副本或其他的东西:(我的操作系统== 的Mac OS X 10.7.5狮子

  • /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 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

请让我知道如果你需要更多的信息。 谢谢!


更新

我profoudly重新思考它为什么变得如此疯狂。 我相信这是因为我通过安装的东西:

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

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

Answer 1:

为什么它搞的一团糟?

还有就是不同的方式夫妇安装Python,作为OP的更新说,他们在不同的位置查找文件。 例如, macports把东西放到/opt/local/ ,而homebrew把东西放到/usr/local/ 。 此外,Mac OS X上带来了一些Python版本与本身。 所以,如果你通过不同的方式安装python很多次,你会得到你的系统上独立存在的许多Python版本

不会造成什么问题?

我不知道到底。 我想这个问题是,如果你有蟒蛇的许多版本,然后使用哪一个和在哪里可以找到包将在您的系统路径顺序确定PATHPYTHONPATH分别。 所以,你可能会失去在哪里安装Python模块控制。 想想看,如果你运行sudo python setup.py install安装模块(它由根的发现蟒蛇PATH ),然后尝试import由模块python -c "import it" (你这个时候它发现蟒蛇PATH )或许真的会出问题。 这是我的猜测,我没有验证它。 但在我自己的情况下,什么事情也出问题。

如何避免这种情况?

我觉得原则是, 要注意的是不同的方法和工具可以独立安装的东西到不同的位置,所以正念地使用它们

  • 除非你打算时,不要通过不同的方式安装同样的事情两次。 (如果你打算做的蟒蛇,你可能要退房virtualenv
  • 在你的路径顺序上眼睛PATH和考虑,如果它是正确的。
  • 当安装模块,清楚这蟒(或PIP)正在运行,并且被安装在模块的位置。

那么,为什么我解决我自己的情况?

因为已经已经搞乱了,似乎是非常难以治愈,所以最后我通过一个完整的操作系统重新安装解决了这个问题,并开始按照上面的DOS的和DONTs。 对于安装与Python(numpy的/ SciPy的/ matplotlib,这表明问题让我问这个问题)的科研环境,我发现这个教程是非常有用的。 所以,问题终于解决了。



Answer 2:

以下是混淆了我,怎么我解决它。

$ 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的自制软件安装,但确实有python3安装。 在/ usr /斌/ 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/...

请注意“/图书馆/ Python的...这是的Mac OS的Python版本。 但我想留严格对用户安装的版本(即自制)。

因此,这里是我做过什么来解决这个:

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

它不再/库/ ..但在/ usr /本地。

现在它找到了我所有PIP安装的模块! 问题解决了!


更新:

更新冲泡1.5.4版本后,它似乎是符号链接被删除。 现在你要添加到您的路径:

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

阅读“BREW信息蟒蛇”的注意事项部分:

==> 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


Answer 3:

为了安装Python发行到指定的文件夹,您可以使用--prefix Python安装过程中的方案。 使用前缀方案 ,例如,你可以安装Python 2.7到该文件夹/opt/py27 。 现在,为了使用新安装的Python发行,你必须: 清理PATHLD_LIBRARY_PATH:

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

而已。

(如果你需要的Python的多种环境安装在同一时间,我建议看看的virtualenv )



Answer 4:

这里还有一个很好的解决方案来管理不同的Python版本:

https://github.com/pyenv/pyenv

(我已经在这里给出了一个答案,但还是决定发布此作为附加或备选答案)



文章来源: Too many different Python versions on my system and causing problems