Как установить путь к Python в уже созданном virtualenv?

108

Какой файл редактировать и как? Я создал виртуальную среду.

TIMEX
источник
убедитесь, что он указывает на правильные каталоги. Если у вас его еще нет, нажмите кнопку «Создать» и создайте его.
11
Используйте команду add2virtualenv .
s29
5
add2virtualenv - это virtualenvwrapperкоманда. Это не часть virtualenv.
kojiro

Ответы:

125

РЕДАКТИРОВАТЬ # 2

Правильный ответ - ответ @arrogachev .


Если вы хотите изменить PYTHONPATHиспользуемый в virtualenv, вы можете добавить следующую строку в свой bin/activateфайл virtualenv :

export PYTHONPATH="/the/path/you/want"

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

РЕДАКТИРОВАТЬ: (чтобы ответить на комментарий @ RamRachum)

Чтобы восстановить исходное значение deactivate, вы можете добавить

export OLD_PYTHONPATH="$PYTHONPATH"

перед ранее упомянутой строкой и добавьте следующую строку в свой bin/postdeactivateсценарий.

export PYTHONPATH="$OLD_PYTHONPATH"
mdeous
источник
1
Он тоже будет удален deactivate?
Ram Rachum
1
Значит, это означает, что вновь созданная виртуальная среда имеет значение по умолчанию PYTHONPATH(глобальное) вместо локального пути virtualenv?
ducin
6
У меня это сработало очень хорошо, я не использую virtualenvwrapper. Только обратите внимание, что у меня не было такого скрипта bin / postdeactivate, rathere activate имел функцию деактивации. Таким образом, строку кода следует поместить туда, стараясь заключить ее в оператор if, как и остальные операции в функции.
Никколо
2
Кажется странным, что virtualenv не делает этого по умолчанию.
Сет
2
Edit # 2 - ложь! :) Правильный ответ - ответ @ arjen-p-de-
vries
73

Комментарий @ s29 должен быть ответом:

Один из способов добавить каталог в виртуальную среду - установить virtualenvwrapper (который полезен для многих вещей), а затем выполнить

mkvirtualenv myenv
workon myenv
add2virtualenv . #for current directory
add2virtualenv ~/my/path

Если вы хотите удалить этот путь, отредактируйте файл myenvhomedir/lib/python2.7/site-packages/_virtualenv_path_extensions.pth

Документацию по virtualenvwrapper можно найти по адресу http://virtualenvwrapper.readthedocs.org/en/latest/

Конкретную документацию по этой функции можно найти на http://virtualenvwrapper.readthedocs.org/en/latest/command_ref.html?highlight=add2virtualenv.

tjb
источник
6
удалить:add2virtualenv -d
thecheech
1
просто связал этот ответ в моем, так как он намного лучше
mdeous
27

Вы можете создать .pthфайл, содержащий каталог для поиска, и поместить его в site-packagesкаталог. Например:

cd $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
echo /some/library/path > some-library.pth

Эффект такой же , как добавление /some/library/pathк sys.path, и остаются локальными для virtualenvустановки.

Арьен П. Де Врис
источник
7
Мне очень нравится такой подход; не так непостоянно, как добавление строк для активации / деактивации, и не требует использования virtualenvwrapper. Если вы не хотите вызывать python для поиска каталога site-packages, он находится по довольно предсказуемому пути $VIRTUALENV_ROOT/lib/pythonX.Y/site-packages. Документы по файлам .pth: docs.python.org/3.6/library/site.html
Алек,
2
Я не хотел вводить абсолютный путь, потому что мои рабочие области перемещаются по моей файловой системе. И в моем пути к проекту есть пробелы. Итак, я набрал слегка измененную команду: pushd "$(venv/bin/python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")" ...path/to/project/venv/lib/python3.7/site-packages ...path/to/project echo ../../../../src > my_project.pth popdЗатем я деактивировал свой виртуальный сервер и снова активировал его. Теперь я мог запускать код проекта, для которого требовалось знать, где находится каталог моего проекта.
Джим ДеЛаХант
4
Это правильный ответ. Изменение предоставленного поставщиком скрипта ( /bin/activate) является злоупотреблением служебным положением, и установка сторонних инструментов уступает использованию встроенного способа для достижения того же.
Red
2
  1. Инициализируйте свой virtualenv
cd venv

source bin/activate
  1. Просто установите или измените свой путь к Python, введя следующую команду:
export PYTHONPATH='/home/django/srmvenv/lib/python3.4'
  1. для проверки пути python введите в python:
   python

      \>\> import sys

      \>\> sys.path
Сиярам Малав
источник
1

Я изменил свой скрипт активации, чтобы получить файл .virtualenvrc, если он существует в текущем каталоге, и сохранить / восстановить PYTHONPATHпри активации / деактивации.

Вы можете найти пропатченный activateскрипт здесь.. Это замена скрипту активации, созданному virtualenv 1.11.6.

Затем я добавил что-то вроде этого в свой .virtualenvrc:

export PYTHONPATH="${PYTHONPATH:+$PYTHONPATH:}/some/library/path"
Андре Ласло
источник
-20

Здесь уже есть ответ -> Моя виртуальная среда (python) вызывает поломку моего PYTHONPATH?

UNIX / LINUX

Добавьте это "export PYTHONPATH = / usr / local / lib / python2.0" в файл ~ / .bashrc и введите его, набрав "source ~ / .bashrc" OR ". ~ / .Bashrc".

WINDOWS XP

1) Перейдите на панель управления 2) Дважды щелкните Система 3) Перейдите на вкладку Дополнительно 4) Щелкните Переменные среды

В окне «Системные переменные» проверьте, есть ли у вас переменная с именем PYTHONPATH. Если он у вас уже есть, убедитесь, что он указывает на правильные каталоги. Если у вас его еще нет, нажмите кнопку «Создать» и создайте его.

КОД PYTHON

В качестве альтернативы вы также можете сделать это ниже своего кода: -

import sys
sys.path.append("/home/me/mypy") 
Равикиран
источник
4
-1: это относится к PYTHONPATH пользователя, а не к PYTHONPATH virtualenv.
twneale