2015-11-12 2 views
4

Я работаю над кластером, и кластер уже имеет на нем установку python.Поддержание действительно независимой установки Python

Но, как и мои отношения с R, я хотел бы поддерживать локальную независимую установку Python. Это для меня похоже на то, что авторы никогда не предполагали, что питон будет.

Я установил python с тегом --prefix, а позже получил ошибку от pip при установке пакетов на локальную установку, поскольку локальная установка была источником пакетов из определенной папки сервера /usr/lib/pythonX.Y/dist- пакеты /. Легким решением было бы перекомпилировать мою версию, чтобы она использовала ту же кодировку USC4, что и общесистемная установка.

Но я не хочу этого делать, поскольку я хотел бы быть свободным от различных неконтролируемых переменных, которые поражают наши кластерные ОС, которые приводят к инциденту, когда вся ОС должна быть обновлена.

sys.path является виновником, который создает этот путь /usr/lib/pythonX.Y/, используя os.path в файле site.py, а затем импортирует его.

Как я могу окончательно удалить этот путь из моей установки python? предпочтительно во время компиляции самого Python. Я только прибегаю к модификации site.py после того, как я знаю, что для меня нет другого способа сделать это.

UPDATE:

Так что теперь я перешел к использованию pyenv. Но я не думаю, что это оптимальное решение проблемы. Мне бы очень хотелось узнать, почему это прямое решение было принято авторами python для получения исходных общесистемных путей к любой локальной установке python.

UPDATE 12-04-2016:

я натыкался Anaconda, и теперь я счастлив сказать, что я нашел решение, т.е.

  1. , где я могу поддерживать установку питона, который, если это предусмотрено со всеми пакетами в локальной установке сначала выберите эти пакеты и их зависимости из локальной установки, а затем, наконец, просмотрите системные пути для других пакетов. Это отвечает первой проблеме, которая у меня была

    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. с помощью менеджера пакетов condas анаконда, я могу установить почти все пакеты, которые мне нужно для моей работы (Научные данные/номер хруст). Если я не могу просто сделать python install "package" --user

и которые будут установлены под /home/user/.local/. Если он никогда не был найден, это означает, что его нет даже под глобальным определением.

ответ

0

я натыкался Anaconda, и теперь я счастлив сказать, что я нашел решение, т.е.

  1. , где я могу поддерживать установку питона, который, если снабженный все пакеты в пределах локальная установка сначала выберет эти пакеты и их зависимости от локальной установки, а затем, наконец, рассмотрит системные пути для других пакетов. Это отвечает первой проблеме, которая у меня была

    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. с помощью менеджера пакетов condas анаконда, я могу установить почти все пакеты, которые мне нужно для моей работы (Научные данные/номер хруст). Если я не могу просто сделать python install "package" --user

и которые будут установлены под /home/user/.local/. Если он никогда не был найден, это означает, что его нет даже под глобальным определением.

2

Виртуальная среда сделает трюк для вас. Он предназначен для хранения отдельных сред python.Например, для некоторых приложений может потребоваться более старая версия пакета, тогда как другому приложению может потребоваться более поздняя версия того же пакета. Виртуальная среда позволяет создавать независимые среды python для каждого приложения. Вы можете найти документацию here

+0

Я использую pyenv для достижения этого. Моя проблема с python заключается не в том, как я поддерживаю отдельные установки, а в том, почему мне приходится обходиться с родным поведением python, когда многие другие языки программирования отлично согласны с тем, что они существуют независимо от общесистемной установки. – FoldedChromatin

Смежные вопросы