Як додати шлях до PYTHONPATH у virtualenv


97

Я намагаюся додати шлях до змінної середовища PYTHONPATH, який буде видно лише з певного середовища virtualenv.

Я пробував SET PYTHONPATH=...під командним рядком virtualenv, але це встановлює змінну для всього середовища.

Як я цього можу досягти?

Відповіді:


155

Зазвичай можна уникнути необхідності робити що-небудь із PYTHONPATH, використовуючи .pthфайли . Просто помістіть файл із розширенням .pth (будь-яке базове ім’я працює) у папку сайту-пакети вашого virtualenv, наприклад lib\python2.7\site-packages, з абсолютним шляхом до каталогу, що містить ваш пакет як єдиний вміст.


На жаль, це не працює як заміна. Він додає шлях, тому якщо ви розробляєте, це не спрацює.
Ерік Аронесті,

Крім того, якщо ви знаєте абсолютний шлях, у чому сенс змінної?
Джеймі Маршалл

Ви також можете перейти до папки пакетів пакунків для віртуального середовища та створити символічне посилання на файл .pth таким чином: ln -s path / to / somfile.pth. Я знайшов це корисним, коли мені потрібен був той самий каталог, щоб бути доступним у кількох віртуальних середовищах
Data-Phile

91

Якщо ви використовуєте virtualenv, ви, ймовірно, також використовуєте virtualenvwrapper , і в цьому випадку ви можете використовувати команду add2virtualenv для додавання шляхів до шляху Python для поточного virtualenv:

add2virtualenv directory1 directory2 …


3
Як щодо зняття з virtualenv?
срібний кинжал

1
Хочу додати дружній коментар, що для спільних хостів та подібних ситуацій venv wrapper не бажаний. У таких випадках діє один вентилятор, і все, що потрібно для додаткової установки, не бажано. Місцеві речі різні, але на сервері / зображенні KISS дійсно важливий.
Марк

2
Я не впевнений, як працювала команда, коли це було написано, але add2virtualenvне змінює $ PYTHONPATH, скоріше вона модифікує sys.path.
ForeverWintr

1
@ajostergaard: Вибачте, я повинен був надати джерело. Якщо ви подивитеся на вихідний код для add2virtualenv, ви можете побачити, що він змінює sys.path. Я погоджуюся, що в документах звучить так, ніби він змінює PYTHONPATHзмінну середовища, але, здається, це неправильно. bitbucket.org/virtualenvwrapper/virtualenvwrapper/src/…
ForeverWintr

1
@ForeverWintr Я виправлений - файли .pth використовуються для установки sys.path. docs.python.org/2/library/site.html Confused.com!
ostergaard

5

Ви також можете спробувати поставити символьне посилання на один із своїх віртуалів.

напр. 1) активуйте свій virtualenv 2) запустіть python 3) імпортуйте sys і перевірте sys.path 4) ви знайдете там шлях пошуку python. Виберіть один із них (наприклад, сайт-пакети) 5), перейдіть туди і створіть символьне посилання на ваш пакет, наприклад: ln -s шлях до вашого імені пакета-з-який-ви будете імпортувати

Таким чином, ви зможете імпортувати його, навіть не активуючи свій virtualenv. Просто спробуйте: path-to-your-virtualenv-folder / bin / python та імпортуйте свій пакет.


Я думаю, це було сприйнято для використання символьних посилань, а не .pth файлів. Це працювало для мене, хоча, так, whavever.
Гарет Девідсон

3

Якщо ви використовуєте virtualenvwrapper,

$ cd to the parent folder
$ add2virtualenv  folder_to_add

відобразиться консоль

Warning: Converting "folder_to_add" to "/absoutle/path/to/folder_to_add"

Ось і все, і вам слід добре піти


1
import sys
import os

print(str(sys.path))

dir_path = os.path.dirname(os.path.realpath(__file__))
print("current working dir: %s" % dir_path)

sys.path.insert(0, dir_path)

Я настійно рекомендую вам використовувати virtualenv та virtualenvwrapper, щоб уникнути захаращення шляху.


якщо ви хочете, щоб це працювало з будь-якою версією python, просто використовуйте звичайний
Guillaume S

Дякуємо за коментар Я переглянув для використання. старі способи громіздкі та ідіосинкратичні, і про просту систему шаблонів немає нічого фантазійного
Каучукова качка

Все відносно :)
Гійом S
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.