Как сказать Python отдавать предпочтение модулю из $ HOME / lib / python над / usr / lib / python? - PullRequest
8 голосов
/ 30 марта 2012

В Python я получаю сообщение об ошибке, потому что он загружает модуль из /usr/lib/python2.6/site-packages, но я хотел бы, чтобы он использовал мою версию в $HOME/python-modules/lib/python2.6/site-packages, которую я установил, используя pip-python --install-option="--prefix=$HOME/python-modules --ignore-installed

Какя могу сказать Python использовать мою версию библиотеки?Установка PYTHONPATH в $HOME/python-modules/lib/python2.6/site-packages не помогает, так как /usr/lib/..., очевидно, имеет приоритет.

Ответы [ 4 ]

10 голосов
/ 30 марта 2012

Посмотрите на модуль site , чтобы узнать, как настроить свою среду.

Один из способов сделать это - добавить файл в папку, которая в данный момент находится на sys.path и называется usercustomize.py, при запуске Python он автоматически импортирует этот файл, и вы можете использовать его для изменения sys.path.

Сначала установите $PYTHONPATH на $HOME (или добавьте $HOME, если $PYTHONPATH имеет значение), затем создайте файл $HOME/usercustomize.py со следующим содержимым:

import sys, os
my_site = os.path.join(os.environ['HOME'],
                       'python-modules/lib/python2.6/site-packages')
sys.path.insert(0, my_site)

Теперь, когда вы запускаете Python, вы должны увидеть каталог пользовательских пакетов сайта, прежде чем система по умолчанию будет sys.path.

8 голосов
/ 30 марта 2012

Более новые версии Python теперь имеют встроенную поддержку для поиска местоположения opendesktop:

$HOME/.local/lib/pythonX.Y/site-packages

Если вы поместите туда свои локальные модули, вам не придется манипулировать sys.path.

3 голосов
/ 23 января 2017

Если у вас установлено несколько версий пакета, скажем, например, SciPy:

>>> import scipy; print(scipy.__version__); print(scipy.__file__)
0.17.0
/usr/lib/python3/dist-packages/scipy/__init__.py

, и вы хотите, чтобы версия, установленная пользователем (установлена, например, с помощью pip install --user --upgrade scipy), была предпочтительна, нужно *Файл 1005 * usercustomize.py в ~/.local/lib/python3.5/site-packages/, например, с таким содержимым:

import sys, os
my_site = os.path.join(
    os.environ['HOME'], '.local/lib/python%d.%d/site-packages' % (
        sys.version_info[0], sys.version_info[1]))
for idx, pth in enumerate(sys.path):
    if pth.startswith('/usr'):
        sys.path.insert(idx, my_site)
        break
else:
    raise ValueError("No path starting with /usr in sys.path")

(индекс выбора цикла for гарантирует, что пакеты, установленные в «режиме разработки», имеют приоритет), теперь мы получаем нашего пользователяконкретная версия SciPy:

>>> import scipy; print(scipy.__version__); print(scipy.__file__)
0.18.1
/home/user/.local/lib/python3.5/site-packages/scipy/__init__.py
0 голосов
/ 12 апреля 2017

, чтобы предпочесть пакеты, установленные для пользовательской базы (например, pip install --user --upgrade cool_thing)

в ~/.bashrc, ~/.profile или любой другой файл инициализации для вашей оболочки, добавьте

export PYTHONUSERBASE="$HOME/python-modules"

в $PYTHONUSERBASE/usercustomize.py

#!/usr/bin/env python
import sys, site
sys.path.insert(0, site.getusersitepackages())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...