Как именно работает Python папка venv? Мой проект использует зависимости в этой папке venv, выполняя проект с другой версией Python? - PullRequest
0 голосов
/ 28 марта 2020

Я абсолютный новичок с Python (я пришел с Java), и у меня есть следующие сомнения по поводу папки venv в моем проекте.

Так что в основном я имею структура этого проекта:

enter image description here

Как вы можете видеть, он содержит папку venv . Читая официальную документацию Python: https://docs.python.org/3/library/venv.html

Я могу прочитать:

Модуль venv поддерживает создание легких «виртуальных сред» с их собственные каталоги сайтов, опционально изолированные от системных каталогов сайтов. Каждая виртуальная среда имеет свой собственный двоичный файл Python (который соответствует версии двоичного файла, который использовался для создания этой среды) и может иметь собственный независимый набор установленных пакетов Python в своих каталогах сайта.

Итак, насколько я понимаю, это означает, что, используя venv , каждый проект имеет свою собственную папку venv , содержащую:

  1. Папка bin : содержит двоичный файл интерпретатора Python (в данном случае c Python 3.7).

  2. lib папка: содержит зависимости, которые я установил с помощью pip3 (в действительности я установил scapy и scapy_http через pip3)

Это потому, что моя PyCharm IDE настроена на использование Python 3.7

Если эти рассуждения верны (я точно не уверен), это означает, что когда я запускаю что-то вроде:

python3 packet_sniffer.py

сценарий packet_sniffer.py (содержится в предыдущем про ject) будет выполняться с использованием Python 3 bynary и зависимостей, которые находятся в моей папке venv . Правильно ли это?

Если мои рассуждения верны, у меня возникает следующее сомнение:

Что произойдет, когда я использую Python 2 от

python packet_sniffer.py

Я полагаю, что он больше не использует версию Python 3, встроенную в папку venv моего проекта. И какие зависимости scapy я использую? откуда он взялся?

Как вы видите, работает с python вместо python3 Я использую Python 2 версию:

root@kali:~# python --version
Python 2.7.17
root@kali:~# python3 --version
Python 3.7.5

Ответы [ 3 ]

1 голос
/ 28 марта 2020

Если вы создадите виртуальную среду и затем активируете ее, интерпретатор python, установленный в этой виртуальной среде, будет запущен, если вы вызовете любой из них: python foo.py / python3 foo.py. Будет НЕТ различий между вызовами python foo.py или python3 foo.py (если вы, конечно, установили python3).

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

Итак, насколько я понимаю, это означает, что, используя venv, у каждого проекта есть собственная папка venv, содержащая:

  1. Папка bin: она содержит двоичный файл интерпретатора Python (в данном случае c case Python 3.7).

  2. Папка lib: содержит зависимости, которые я установил с помощью pip3 (на самом деле я установил scapy и scapy_http через pip3)

Использование venv каждые У проекта есть собственная папка virtual environment , в которой вы можете назвать все, что пожелаете, в том числе папку bin и папку lib.

1 голос
/ 28 марта 2020

Если у вас активирована виртуальная среда, то все, что вы говорите о выполнении python3, правильно. Тем не менее, все другие команды по-прежнему доступны и будут запускаться отовсюду, если они находятся в вашей оболочке. Таким образом, ваша команда python, вероятно, выполняет установленную на системном уровне версию python.

Если вы хотите узнать точно , откуда запускается интерпретатор python:

 python
 >>> import sys
 >>> print(sys.executable)
 C:\Python27\python.exe
1 голос
/ 28 марта 2020

python виртуальные среды

Папка venv является рекомендуемым стандартом для установки python виртуальных сред. Для использования виртуальной среды вы должны сначала активировать it.

Примечание : активировать виртуальную среду python перед установкой любых пакетов, требуемых вашим приложением.

из командной строки выполните:

source venv/bin/activate
python packet_sniffer.py 

Примечание : вам не нужно указывать c версию python, так как по умолчанию используется используемая версия для создания виртуальной среды.

PyCharm можно настроить для использования python виртуальных сред

https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html

...