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

Как установить пакет внутри virtualenv?

Я создал virtualenv со следующей командой.

mkvirtualenv --distribute --system-site-packages "$1"

После запуска virtualenv с помощью workon введите ipython. Это подсказывает мне

WARNING: Attempting to work in a virtualenv. If you encounter problems, please install IPython inside the virtualenv.

Когда я пытаюсь установить ipython с virtualenv, я получил следующее сообщение об ошибке:

pip install ipython
Requirement already satisfied (use --upgrade to upgrade): ipython in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
Cleaning up...

Кто-нибудь знает, как установить внутри virtualenv?

4b9b3361

Ответ 1

Создайте свой virtualenv с помощью --no-site-packages, если вы не хотите, чтобы он мог использовать внешние библиотеки:

virtualenv --no-site-packages my-virtualenv
. my-virtualenv/bin/activate
pip install ipython

В противном случае, как в вашем примере, он может видеть, что библиотека, установленная в вашей системе Python, удовлетворяет запрошенной зависимости.

Ответ 2

Некоторые инструкции, которые могут избежать головной боли при использовании виртуальных сред:

  • Создайте папку для ваших проектов.
  • Создайте свои проекты Virtualenv внутри этой папки.
  • После активации среды вашего проекта, никогда не используйте " sudo pip install package".
  • После окончания работы всегда " деактивируйте " свою среду.
  • Избегайте переименования папки вашего проекта.


Для лучшего представления здесь симуляция:

создание папки для ваших проектов/сред

$ mkdir venv

создание среды

$ cd venv/ 

$ virtualenv google_drive
New python executable in google_drive/bin/python
Installing setuptools, pip...done.

активирующая среда

$ source google_drive/bin/activate

установка пакетов

(google_drive) $ pip install PyDrive
Downloading/unpacking PyDrive
Downloading PyDrive-1.3.1-py2-none-any.whl
...
...
...    
Successfully installed PyDrive PyYAML google-api-python-client oauth2client six uritemplate httplib2 pyasn1 rsa pyasn1-modules
Cleaning up...

пакет доступен внутри среды

(google_drive) $ python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
>>>  
>>> gdrive = pydrive.auth.GoogleAuth()
>>>

дезактивировать окружающую среду

(google_drive) $ deactivate 

$ 

пакет НЕ ДОСТУПЕН вне окружающей среды

$ python
Python 2.7.6 (default, Oct 26 2016, 20:32:10) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import pydrive.auth
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named pydrive.auth
>>> 

Заметки:

Почему не судо?

Virtualenv создает совершенно новую среду для вас, определяя $ PATH и некоторые другие переменные и настройки. Когда вы используете пакет установки sudo pip, вы запускаете Virtualenv в качестве пользователя root, экранируете всю созданную среду, а затем устанавливаете пакет в глобальных пакетах сайта, а не в папке проекта, где находится виртуальная среда, хотя вы активировали среду.

Если вы переименуете папку вашего проекта...

... вам нужно настроить некоторые переменные из некоторых файлов в каталоге bin вашего проекта.

Например:

мусорное ведро, линия 1 (She Bang)

корзина/активировать, строка 42 (VIRTUAL_ENV)

Ответ 3

Ну, у меня нет соответствующей причины, почему это происходит, но затем я нашел небольшую работу вокруг

Внутри виртуальной среды

pip install -Iv package_name==version_number

теперь это установит версию в вашей виртуальной среде

Кроме того, вы можете проверить внутри виртуальной среды с помощью этого

pip install yolk
yolk -l

Это даст вам подробную информацию обо всех установленных пакетах в обоих местах (система и virtualenv)

В то время как некоторые могут сказать, что нецелесообразно использовать --system-site-пакеты (это может быть правдой), но что, если вы уже сделали много вещей внутри своего виртуального? Теперь вы не хотите переделывать все с нуля.

Вы можете использовать это как взломать и быть осторожным со следующего раза:)

Ответ 4

Чтобы использовать виртуальную среду virtualenv, вам сначала нужно source env/bin/activate. После этого просто установите пакеты с помощью pip install package-name.

Ответ 5

Для Python 3:

pip3 install virtualenv

python3 -m venv venv_name

source venv_name/bin/activate  #key step

pip3 install "package-name"

Ответ 6

Дальнейшее разъяснение другого ответа здесь:

В текущей версии virtualenv флаг -no-site-packages является поведением по умолчанию, поэтому вам не нужно его указывать. Однако вы переопределяете значение по умолчанию, явно используя флаг -system-site-packages, и это, вероятно, не то, что вы хотите. Поведение по умолчанию (без указания какого-либо флага) заключается в создании виртуальной среды, так что когда вы ее используете, любые пакеты Python, установленные вне среды, недоступны. Это обычно правильный выбор, потому что он лучше изолирует виртуальную среду от локальной компьютерной среды. Пакеты Python, установленные в среде, не будут влиять на ваш локальный компьютер и наоборот.

Во-вторых, чтобы использовать виртуальную среду после ее создания, вам необходимо перейти в каталог виртуальной среды, а затем запустить:

bin/activate

Это делается для настройки переменных среды, чтобы пакеты Python и любые исполняемые файлы в папках bin виртуальной среды были использованы до тех, которые находятся в стандартных локациях на вашем локальном компьютере. Так, например, когда вы вводите "pip", версия pip, находящаяся внутри вашей виртуальной среды, запускается вместо версии pip на вашей локальной машине. Это желательно, потому что pip внутри виртуальной среды будет устанавливать пакеты внутри виртуальной среды.

Проблема, с которой вы сталкиваетесь, заключается в том, что вы запускаете программы (например, ipython) с вашей локальной машины, когда вместо этого вы хотите установить и запустить копии этих программ, изолированных внутри вашей виртуальной среды. Вы устанавливаете это путем создания среды (без указания флагов пакетов сайта, если вы используете текущую версию), запустив активированный script, упомянутый выше, затем запустите pip для установки любых необходимых вам пакетов (которые войдут в среду).

Ответ 7

У меня была та же проблема, и --no-site-packages не работал у меня. Я обнаружил в этом более раннем архиве списков рассылки, что вы можете принудительно установить установку в virtualenv, используя флаг -U для pip, например pip -U ipython. Вы можете проверить, работает ли это с помощью команды bash which ipython, в то время как в virtualenv.

источник: https://mail.python.org/pipermail/python-list/2010-March/571663.html

Ответ 8

Из документации https://docs.python.org/3/library/venv.html:

Pyvenv script устарел от Python 3.6 в пользу использования python3 -m venv, чтобы предотвратить любую возможную путаницу в отношении того, на какой основе будет интерпретировать Python виртуальную среду.

Чтобы создать виртуальную среду для конкретного проекта, создайте файл /home/user/path/to/create_venv.sh:

#!/usr/bin/env bash

# define path to your project directory
PROJECT_DIR=/home/user/path/to/Project1

# a directory with virtual environment
# will be created in your Project1 directory
# it recommended to add this path into your .gitignore
VENV_DIR="${PROJECT_DIR}"/venv

# https://docs.python.org/3/library/venv.html
python3 -m venv "${VENV_DIR}"

# activates the newly created virtual environment
. "${VENV_DIR}"/bin/activate

# prints activated version of Python
python3 -V

pip3 install --upgrade pip

# Write here all Python libraries which you want to install over pip
# An example or requirements.txt see here:
# https://docs.python.org/3/tutorial/venv.html#managing-packages-with-pip
pip3 install -r "${PROJECT_DIR}"/requirements.txt

echo "Virtual environment ${VENV_DIR} has been created"

deactivate

Затем запустите этот script в консоли:

$ bash /home/user/path/to/create_venv.sh

Ответ 9

Вы можете перейти в папку, где находится ваш venv и щелкнуть правой кнопкой мыши → git bash here. Тогда вам нужно просто python -m pip install ipython и он будет установлен внутри папки.

Я нахожу это еще более удобным с пакетом virtualenv, который создает venv внутри папки проекта.

Ответ 10

Поделиться тем, что сработало для меня как в Ubuntu, так и в Windows. Это для python3. Чтобы сделать для python2, замените "3" на "2":

Ubuntu

pip install virtualenv --user
virtualenv -p python3 /tmp/VIRTUAL
source /tmp/VIRTUAL/bin/activate
which python3

Чтобы установить любой пакет: pip install package

Чтобы выйти из виртуальной среды: deactivate

Чтобы снова активировать: source/tmp/VIRTUAL/bin/activate

Полное объяснение здесь.

Windows

(Предполагается, что у вас установлена MiniConda и вы находитесь в меню "Пуск"> Anaconda> Anaconda Terminal)

conda create -n VIRTUAL python=3  
activate VIRTUAL

Для установки любого пакета: pip install package или conda install package

Чтобы выйти из виртуальной среды: deactivate

Чтобы снова activate VIRTUAL: activate VIRTUAL

Полное объяснение здесь.

Ответ 11

Поделиться личным делом, если это поможет. Дело в том, что виртуальная среда была заранее организована. Его путь может быть отображен

echo $VIRTUAL_ENV

Убедитесь, что он доступен для записи текущему пользователю. Если нет, используя

sudo ipython

наверняка очистит предупреждение.

В anaconda, если $ VIRTUAL_ENV расположен независимо, можно просто удалить эту папку или переименовать ее, а затем перезапустить оболочку. Anaconda восстановит настройки по умолчанию.