2016-01-12 2 views
2

Я установил модуль, компилирующий исходный код. Я сделал это с помощью python3.4, и модуль находится в /usr/local/lib/python3.4/site-packages/. Если я попытаюсь запустить его, python3.4 не сможет его найти. Если я добавлю каталог в PYTHONPATH, все будет работать.установить различные системные пути для python 3.2 и python 2.7 глобально

Но у меня есть две версии python (я запускаю ubuntu). Python2.7 и python3.4. После того, как я добавить каталог в PYTHONPATH становится:

/home/myuser/development/ros/devel/lib/python2.7/dist-packages:/opt/ros/indigo/lib/python2.7/dist-packages:/home/myuser/Qt/5.5/gcc_64/lib/cmake/lib/python2.7/dist-packages:/usr/local/lib/python3.4/site-packages/:/home/myuser/development/lcm 

так что есть каталоги, связанные с python2.7 и python3.4 в одной и той же переменной окружения, которая является абсолютно небезопасны и ума, я думаю. Его склонность к ошибкам.

Я оглядывался и обнаружил, что люди рекомендуют использовать virtualenv. Тем не менее, это не меняет PYTHONPATH.

Каков стандартный способ справиться с этим? некоторые мысли:

  • Я бы ожидать, что python3.4 будет автоматически искать модули в /usr/local/lib/python3.4/site-packages/ и что не происходит. Может быть, у моей установки python3.4 есть что-то?
  • Даже если мне удастся использовать этот модуль для python3.4 без использования PYTHONPATH, у меня все еще есть информация в PYTHONPATH, относящаяся к python2.7, даже когда я использую python3.4, поэтому я, вероятно, тоже должен удалить это.

Итак, как установить путь для python для поиска модулей по всему миру (не используя sys.path() для каждой программы), но с каждой версией python, используя собственный путь?

EDIT: Из комментария я понял, что могу просто добавить символическую ссылку в каталог, где находятся мои модули. Но я обнаружил, что ни на python 2.7, ни на 3.4 нет сайтов-пакетов на своем пути, что неправильно. Это проблема ubuntu? Я где-то читал, что сайты-пакеты должны использоваться для самокомпилированных модулей и dist-пакетов для модулей, установленных через apt-get.

EDIT 2: python #. #/Site-packages зарезервирован для пользовательских пакетов. По крайней мере, в ubuntu python по умолчанию не будет выглядеть. Таким образом, поведение, которое у меня было, было правильным, ничего не случилось с установкой.

+1

Возможно, связанные с: http://stackoverflow.com/q/34632870/244297 –

+1

в качестве лучшей альтернативы предлагается использовать виртуальную среду вместо того, чтобы пытаться установить pa ths глобально https://packaging.python.org/en/latest/installing.html#creating-virtual-environments –

ответ

2

Для пакетов, предназначенных для конкретного пользователя, лучшее место для их установки находится в per-user site directory. В системе unix это будет ~/.local по умолчанию, но его можно изменить, установив переменную окружения PYTHONUSERBASE. Для того, чтобы посмотреть текущие настройки в вашей системе, выполните следующую команду:

[[email protected] tmp]$ PYTHONPATH='' python -m site 
sys.path = [ 
    '/tmp', 
    '/usr/lib/python35.zip', 
    '/usr/lib/python3.5', 
    '/usr/lib/python3.5/plat-linux', 
    '/usr/lib/python3.5/lib-dynload', 
    '/usr/lib/python3.5/site-packages', 
] 
USER_BASE: '/home/user/.local' (exists) 
USER_SITE: '/home/user/.local/lib/python3.5/site-packages' (doesn't exist) 
ENABLE_USER_SITE: True 

Обратите внимание, что каталоги, которые в конечном итоге появляются под .local/lib являются версионными, что позволяет избежать проблем с PYTHONPATH.

Таким образом, при установке пакета, все, что вам нужно сделать, это убедиться, что вы указали правильный питон исполняемый файла, и указать сценарий конфигурирования/установок в каталоге сайта пользователя:

python3.5 setup.py install --prefix /home/user/.local 

Или, если вы «используете pip, то же самое может быть достигнуто с помощью опции --user:

pip3 install --user some-package 
Смежные вопросы