Подтвердить что ты не робот

Как установить разные переменные PYTHONPATH для python3 и python2 соответственно

Я хочу добавить конкретный путь к библиотеке только для python2. После добавления export PYTHONPATH="/path/to/lib/" к моему .bashrc, однако, выполнение python3 получает ошибку: ваш PYTHONPATH указывает на каталог сайта-пакетов для Python 2.x, но вы используете Python 3.x!

Я думаю, это связано с тем, что python2 и python3 используют общую переменную PYTHONPATH.

Итак, могу ли я установить разные переменные PYTHONPATH соответственно для python2 и python3. Если нет, как я могу добавить путь библиотеки исключительно к определенной версии python?

4b9b3361

Ответ 1

Вы можете создать файл конфигурации mymodule.pth в lib/site-packages (в Windows) или lib/pythonX.Y/site-packages (в Unix и Macintosh), а затем добавить одну строку, содержащую каталог, для добавления в путь Python.

Из docs.python2 и docs.python3:

Файл конфигурации пути - это файл, имя которого имеет форму name.pth и существует в одном из четырех каталогов, упомянутых выше; его содержимое - это дополнительные элементы (по одному на строку), которые нужно добавить в sys.path. sys.path элементы никогда не добавляются в sys.path, и не выполняется проверка того, что элемент ссылается на каталог, а не на файл. Ни один элемент не добавляется в sys.path более одного раза. Пустые строки и строки, начинающиеся С#, пропускаются. Строки, начинающиеся с import (после пробела или табуляции), выполняются.

Ответ 2

PYTHONPATH является чем-то вроде взлома в том, что касается управления пакетами. "Красивым" решением было бы упаковать вашу библиотеку и установить ее.

Это может показаться более сложным, чем это, поэтому позвольте мне показать вам, как это работает.

Предположим, что ваш "пакет" имеет один файл с именем wow.py, и вы сохраняете его в /home/user/mylib/wow.py.

Создайте файл /home/user/mylib/setup.py со следующим содержимым:

from setuptools import setup

setup(name="WowPackage",
      packages=["."],
)

Чтобы это, теперь вы можете "правильно установить" свой пакет в дистрибутив Python по вашему выбору, не беспокоясь о PYTHONPATH. Что касается "правильной установки", у вас есть как минимум три варианта:

  • "Действительно правильно". Скопирует ваш код в каталог python site-packages:

    $ python setup.py install
    
  • "Развитие". Добавит только ссылку с сайта-сайта python на /home/user/mylib. Это означает, что изменения в коде в вашем каталоге будут иметь эффект.

    $ python setup.py develop
    
  • "Пользователь". Если вы не хотите писать в системные каталоги, вы можете установить пакет (либо "правильно", либо "в режиме разработки" ) в каталог /home/user/.local, где Python также найдет их самостоятельно. Для этого просто добавьте --user к команде.

    $ python setup.py install --user
    $ python setup.py develop --user
    

Чтобы удалить пакет, установленный в режиме разработки, выполните

$ python setup.py develop -u

или

$ python setup.py develop -u --user

Чтобы удалить пакет, установленный "правильно", сделайте

 $ pip uninstall WowPackage

Если ваш пакет более интересен, чем один файл (например, у вас есть подкаталоги и т.д.), просто перечислите те из параметра packages функции setup (вам нужно будет перечислить все рекурсивно, следовательно, вы используйте вспомогательную функцию для больших библиотек). После того, как вы это заметите, обязательно прочитайте более подробное руководство.

В конце концов, пойдите и внесите свой пакет в PyPI - он так же прост, как и вызов python setup.py sdist register upload (вам потребуется имя пользователя PyPI).

Ответ 3

Я обнаружил, что нет способа изменить PYTHONPATH только для python2 или только для python3. Я должен был использовать файл .pth.

Что я должен был сделать:

  • убедитесь, что каталог создан в моем доме: $HOME/.local/lib/python${MAJOR_VERSION}.${MINOR_VERSION}/site-packages
  • создать файл .pth в этом каталоге
  • проверьте, что ваш .pth файл работает
  • сделанный

Для получения дополнительной информации о.pth. Синтаксис файла и как они работают, смотрите: документы на python2 и документы на python3.

(.pth файлы в двух словах: когда ваш интерпретатор python запускается, он просматривает определенные каталоги и видит файл .pth, открывает эти файлы, анализирует файлы и добавляет эти каталоги в ваш sys.path (то есть то же самое поведение, что и PYTHONPATH) и сделать любые модули Python, расположенные в этих каталогах, доступными для обычного импорта.)