Як додати шлях до 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.