维护真正独立的Python安装

时间:2015-11-12 14:06:49

标签: python python-2.7

我在集群上工作,集群上已经安装了python。

但是,就像我与R的关系一样,我想维护一个本地独立的Python安装。这对我来说似乎是作者从未打算过python的东西。

我使用--prefix标签安装了python,后来在本地安装上安装软件包时从pip收到错误,因为本地安装是从服务器特定文件夹/usr/lib/pythonX.Y/dist-packages中获取软件包/。一个简单的解决方法是重新编译我的版本,以便它使用与系统范围安装相同的USC4编码。

但我不想这样做,因为我希望摆脱困扰我们的群集操作系统的各种无法控制的变量,这些变量导致整个操作系统必须刷新的事件。

sys.path是使用site.py文件中的os.path创建此/usr/lib/pythonX.Y/路径并随后导入它的罪魁祸首。

如何从python安装中永久删除此路径?最好是在编译Python本身时。在我知道没有其他方法可以做到之后,我只会修改site.py。

更新:

所以现在我已经开始使用pyenv了。但我不认为这是解决问题的最佳方案。我真的很想知道为什么python的作者做出明确的决定来获取任何本地python安装的系统范围路径。

更新12-04-2016:

我跑过Anaconda,现在我很高兴地说我找到了一个解决方案,即

  1. 我可以维护python安装,如果提供本地安装中的所有软件包,将首先从本地安装中选择这些软件包及其依赖项,然后最终查看其他软件包的系统范围路径。这回答了我遇到的第一个问题

    sys.path首先定义全局系统范围的库路径,最后是本地库路径。但是在Anaconda中,sys.path选择全局系统范围的lib路径作为第二个优先考虑的地方。

    import sys

    from pprint import pprint as p

        p(sys.path)
        ['',
         '/home/kpal/anaconda2/bin',
         '/usr/lib/pymodules/python2.7',
         '/home/kpal/.local/lib/python2.7/site-packages/cooler-0.3.0-py2.7.egg',
         '/home/kpal/.local/lib/python2.7/site-packages/hiclib-0.0.0-py2.7-linux-x86_64.egg',
         '/home/kpal/.local/lib/python2.7/site-packages/mirnylib-0.0.0-py2.7-linux-x86_64.egg',
         '/home/kpal/anaconda2/lib/python27.zip',
         '/home/kpal/anaconda2/lib/python2.7',
         '/home/kpal/anaconda2/lib/python2.7/plat-linux2',
         '/home/kpal/anaconda2/lib/python2.7/lib-tk',
         '/home/kpal/anaconda2/lib/python2.7/lib-old',
         '/home/kpal/anaconda2/lib/python2.7/lib-dynload',
         '/home/kpal/.local/lib/python2.7/site-packages',
         '/home/kpal/anaconda2/lib/python2.7/site-packages/Sphinx-1.3.5-py2.7.egg',
         '/home/kpal/anaconda2/lib/python2.7/site-packages/setuptools-20.3-py2.7.egg',
         '/home/kpal/anaconda2/lib/python2.7/site-packages',
         '/home/kpal/anaconda2/lib/python2.7/site-packages/IPython/extensions',
         '/home/kpal/.ipython']
    
  2. 使用Anaconda的软件包管理器condas我几乎可以安装我工作所需的所有软件包(科学数据/数字运算)。如果不是,我可以做一个 python install "package" --user

  3. ,它将安装在/home/user/.local/下。如果它从未被发现,则意味着即使在全球定义下它也不存在。

2 个答案:

答案 0 :(得分:2)

虚拟环境将为您提供帮助。它旨在保持单独的python环境。例如,某些应用程序可能需要较旧版本的软件包,而另一个应用程序可能需要同一软件包的更高版本。虚拟环境使每个应用程序都可以拥有独立的python环境。您可以找到文档here

答案 1 :(得分:0)

我跑过Anaconda,现在我很高兴地说我找到了一个解决方案,即

  1. 我可以维护python安装,如果提供本地安装中的所有软件包,将首先从本地安装中选择这些软件包及其依赖项,然后最终查看其他软件包的系统范围路径。这回答了我遇到的第一个问题

    sys.path首先定义全局系统范围的库路径,最后是本地库路径。但是在Anaconda中,sys.path选择全局系统范围的lib路径作为第二个优先考虑的地方。

    import sys

    from pprint import pprint as p

        p(sys.path)
        ['',
         '/home/kpal/anaconda2/bin',
         '/usr/lib/pymodules/python2.7',
         '/home/kpal/.local/lib/python2.7/site-packages/cooler-0.3.0-py2.7.egg',
         '/home/kpal/.local/lib/python2.7/site-packages/hiclib-0.0.0-py2.7-linux-x86_64.egg',
         '/home/kpal/.local/lib/python2.7/site-packages/mirnylib-0.0.0-py2.7-linux-x86_64.egg',
         '/home/kpal/anaconda2/lib/python27.zip',
         '/home/kpal/anaconda2/lib/python2.7',
         '/home/kpal/anaconda2/lib/python2.7/plat-linux2',
         '/home/kpal/anaconda2/lib/python2.7/lib-tk',
         '/home/kpal/anaconda2/lib/python2.7/lib-old',
         '/home/kpal/anaconda2/lib/python2.7/lib-dynload',
         '/home/kpal/.local/lib/python2.7/site-packages',
         '/home/kpal/anaconda2/lib/python2.7/site-packages/Sphinx-1.3.5-py2.7.egg',
         '/home/kpal/anaconda2/lib/python2.7/site-packages/setuptools-20.3-py2.7.egg',
         '/home/kpal/anaconda2/lib/python2.7/site-packages',
         '/home/kpal/anaconda2/lib/python2.7/site-packages/IPython/extensions',
         '/home/kpal/.ipython']
    
  2. 使用Anaconda的包管理器condas我几乎可以安装我工作所需的所有包(科学数据/数字运算)。如果不是,我可以做一个 python install "package" --user

  3. ,它将安装在/home/user/.local/下。如果它从未被发现,则意味着即使在全球定义下它也不存在。