Это старая статья, написанная в 2017 году для внутреннего общения компании. После доработки и обновления он будет переиздан 6 апреля 2019 г. Срок действия содержания оценивается в полгода.При чтении обращайте внимание на срок годности.
Зачем использовать виртуальную среду Python
разница в версии питона
В настоящее время существует 2 версии выпуска Python.Python 2.7.16иPython 3.7.3, две версии имеют некоторые существенные различия в синтаксисе.
Если вы скачали кусок кода Python из Интернета, но он не работает, первое, что нужно исключить, — это проблема с версией Python. Например, следующееhello_python.py, код очень простой, это принтhello,worldна экран.
print "hello,world"
Если вы используете python2.7, поздравляю, вы можете работать хорошо, как показано ниже:
(python27) ➜ python hello_python.py
hello,world
Если вы используете python3, может быть возможно достичь перехода от входа к отказу :(
(python37) ➜ python hello_python.py
File "hello_python.py", line 3
print "hello,world"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("hello,world")?
Способ заставить код нормально работать в python3 такой же, как и подсказка, измените оператор как
print("hello,world")
python2.7 имеет«Устаревший», операция pip предложит:
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Реальность такова, что некоторые проблемы с версией библиотеки или исторические проблемы могут потребовать переключения между python2 и python3.
разница в сценах использования python
Язык python широко используется, включая серверные скрипты, поисковые роботы, разработку программ, научные вычисления, большие данные, машинное обучение и т. д. В разных сценариях используются разные библиотеки:
| сцены, которые будут использоваться | Общая библиотека |
|---|---|
| разработка программы | flask/django |
| рептилия | requests/beautifulsoup4/scrapy |
| Научные вычисления | pandas/numpy/matplotlib |
| ... | ... |
Библиотеки будут зависеть от других библиотек, поэтому, если все они установлены в одной среде, трудно избежать конфликтов версий библиотек.
Ввиду различий в версиях Python и сценариях использования рекомендуется использовать виртуальную среду для управления изоляцией, что избавляет от многих проблем.
Как использовать виртуальную среду
использовать пункт
Прежде чем использовать виртуальную среду, давайте рассмотрим инструменты установки пакетов Python.pip, поверьте, это очень просто.
Одной из самых сильных сторон Python является его богатая библиотека, кроссплатформенность и хорошая совместимость с UNIX, Windows и Macintosh.
Чтобы установить эти библиотеки и ускорить разработку, вам нужно использоватьpip.
использовать нижеpipУстановитьrequestsПример библиотеки:
(py27studio) ➜ pytest pip install requests
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting requests
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/f1/ca/10332a30cb25b627192b4ea272c351bce3ca1091e541245cccbace6051d8/requests-2.20.0-py2.py3-none-any.whl (60kB)
100% |████████████████████████████████| 61kB 1.5MB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
Using cached https://pypi.tuna.tsinghua.edu.cn/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3<1.25,>=1.21.1 (from requests)
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/62/00/ee1d7de624db8ba7090d1226aebefab96a2c71cd5cfa7629d6ad3f61b79e/urllib3-1.24.1-py2.py3-none-any.whl (118kB)
100% |████████████████████████████████| 122kB 1.5MB/s
Collecting certifi>=2017.4.17 (from requests)
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/56/9d/1d02dd80bc4cd955f98980f28c5ee2200e1209292d5f9e9cc8d030d18655/certifi-2018.10.15-py2.py3-none-any.whl (146kB)
100% |████████████████████████████████| 153kB 287kB/s
Collecting idna<2.8,>=2.5 (from requests)
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
100% |████████████████████████████████| 61kB 131kB/s
Installing collected packages: chardet, urllib3, certifi, idna, requests
Successfully installed certifi-2018.10.15 chardet-3.0.4 idna-2.7 requests-2.20.0 urllib3-1.24.1
Это можно увидеть из примераpip2 особенности:
-
Установите быстро. Установка в один клик из командной строки завершена.
-
Автоматически разрешать зависимости. При установке запросов он также устанавливает: chardet, urllib3, certifi, idna и автоматически решает проблему версии каждой библиотеки.В общем, нам не нужно заботиться об этих деталях.
НижеpipНекоторые общие команды
# 列出库列表
pip list
# 升级pip
pip install pip -U
# 安装指定的库
pip install name
# 删除指定的库
pip uninstall name
учитьсяpipПосле общих команд вы можете с удовольствием писать код. Постепенно вы столкнетесь с синхронизирующими библиотеками на разных машинах или с коллегами, использующими ваш код, и вам потребуется установить одну и ту же библиотеку. Тогда вам нужноpip2 расширенные команды.
# 将当期环境中的库列表形成 requirements.txt 文件
pip freeze >requirements.txt
# 根据 requirements.txt 批量安装库
pip install -r requirements.txt
Вы можете использовать следующие 2 команды, чтобы получитьpipВоспользуйтесь помощью, чтобы узнать больше
pip help
pip install -h
так какPyPIСервис находится за границей и доступ к нему относительно медленный. Вы можете использовать некоторые местные источники для ускорения
设置pip使用国内源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
Некоторые другие источники: Douban Source:pypi.douban.com/simple/Облачный источник Alibaba:mirrors.aliyun.com/leather/simple…
Другие платформы/языки имеют аналогичные решения.Если вам интересно, вы можете использовать следующие ключевые слова, чтобы узнать об этом самостоятельно.
yum/apt/npm/brew/maven...
использовать venv
Начиная с версии 3.3, Python поставляется с виртуальной средой venv, вPEP-405Его подробности можно найти в .
В системах *nix вы можете напрямую выполнитьpyvenv ./blog-envДля создания виртуальной среды. В системах Windows вы можете использоватьpython -m venv ./blog-envдля создания эта команда также может быть использована в системах *nix и рекомендуется.
Виртуальную среду, созданную venv, рекомендуется размещать в каталоге проекта, что более удобно в использовании и не требует памяти.
После создания в системах *nix используйтеsource ./blog-env/bin/activateВойдите в виртуальную среду, в оконной системе используйтеScripts\\activate.bat, эффект следующий:
➜ blog source ./blog-env/bin/activate
(blog-env) ➜ blog
Обратите внимание на недавно появившееся перед командной строкой(blog-env)Логотип входит в новую виртуальную среду.
Это очень удобно для получения изолированной среды Python.
использовать pipenv
pipenvдаKenneth ReitzЗапущенный инструмент зависимости пакетов python, известный как krrequestsавтор. Пипенв известенPython Dev Workflow for Humans, Сила очевидна.
вводитьpipenvПрежде, давайте посмотримvenvсуществующие проблемы. У меня есть проект django, использующий django-rest-framework для предоставления службы API RestFul, Используйте jwt для внешней и внутренней аутентификации.После установки проекта зависимости будут следующими:
(wxsc) ➜ wordpress pip list
Package Version
----------------------- ----------
asn1crypto 0.24.0
certifi 2018.10.15
cffi 1.11.5
chardet 3.0.4
coreapi 2.3.3
coreschema 0.0.4
cryptography 2.3.1
diff-match-patch 20181111
Django 2.0.5
django-crispy-forms 1.7.2
django-filter 2.0.0
django-formtools 2.1
django-import-export 1.1.0
django-reversion 3.0.0
djangorestframework 3.9.0
djangorestframework-jwt 1.11.0
et-xmlfile 1.0.1
future 0.16.0
httpie 1.0.0
httplib2 0.12.0
idna 2.7
itypes 1.1.0
jdcal 1.4
Jinja2 2.10
Markdown 3.0.1
MarkupSafe 1.1.0
odfpy 1.3.6
openpyxl 2.5.10
pip 18.1
pipenv 2018.11.14
pycparser 2.19
Pygments 2.2.0
PyJWT 1.6.4
PyMySQL 0.9.2
pytz 2018.5
PyYAML 3.13
requests 2.20.1
setuptools 40.6.2
six 1.11.0
tablib 0.12.1
unicodecsv 0.14.1
uritemplate 3.0.0
urllib3 1.24.1
virtualenv 16.1.0
virtualenv-clone 0.4.0
wheel 0.32.2
xlrd 1.1.0
XlsxWriter 1.1.2
xlwt 1.3.0
Было установлено около 50 пакетов до и после, но в итоге было совершенно непонятно, те устанавливались непосредственно мной, а те устанавливались косвенно.pipenvможет решить эту проблему.
pipenvУстановка проста:
$ pip install pipenv
Если стандартная версия все еще Python2.7, вы можете использовать PIP3 Install Pipenv
pipenvЭто также очень удобно в использовании. Далее, давайте вместе разберемся в этом процессе.
Создайте новый рабочий каталогmyproject, Используйте следующую команду для создания виртуальной среды.После завершения создания в каталоге будет создан файл Pipfile.
$ pipenv --three
Creating a virtualenv for this project…
Pipfile: /private/tmp/myproject/Pipfile
Using /Library/Frameworks/Python.framework/Versions/3.7/bin/python3 (3.7.1) to create virtualenv…
✔ Complete
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.7'
New python executable in /Users/tu/codes/venv/myproject-7Ev2diGY/bin/python3
Also creating executable in /Users/tu/codes/venv/myproject-7Ev2diGY/bin/python
Installing setuptools, pip, wheel...
done.
Running virtualenv with interpreter /Library/Frameworks/Python.framework/Versions/3.7/bin/python3
Virtualenv location: /Users/tu/codes/venv/myproject-7Ev2diGY
Creating a Pipfile for this project…
Просмотрите фактический каталог виртуальной среды, чтобы понять путь к команде python (который можно использовать для выбора интерпретатора с помощью pycharm).
$ pipenv --venv
$ pipenv --py
Виртуальная среда pipenv будет храниться единообразно, а не по пути проекта.
Установите пакет. После установки пакета файл PIPFile.lock будет сгенерирован на пути проекта.
$ pipenv install requests
$ pipenv install django
Уведомление:здесь не используетсяpipДля установки пакета используйтеpipenv.
Просмотр зависимостей проекта. Представление четко описывает, что проект зависит от двух пакетов, и каждый пакет зависит от других пакетов.
➜ myproject2 pipenv graph
Django==2.1.3
- pytz [required: Any, installed: 2018.7]
requests==2.20.1
- certifi [required: >=2017.4.17, installed: 2018.10.15]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.8, installed: 2.7]
- urllib3 [required: >=1.21.1,<1.25, installed: 1.24.1]
повторное использованиеrequirements.txtдокумент. Создать в каталоге проектаrequirements.txt, см. выше.
$ pipenv install
pipenv будет читать локальный каталог по умолчанию, или вы можете использовать параметр **-r**, чтобы указать
requirements.txtМесто расположения.
Зависимости pipenv отличаются от зависимостей venv, и его можно напрямую импортировать в venv.
requirements.txtЕсть некоторые проблемы, вы можете установить его вручную.
pipenvЭто кратко представлено здесь, каждый может видетьруководство по использованию pipenv. В общем, у venv и pipenv есть свои преимущества: Venv нативно собран, что просто и удобно, больше подходит для отладки на сервере, pipenv обладает мощными функциями и больше подходит для локальной отладки.
Anaconda
В области научных вычислений знаменитая библиотека Pythonpandas,numpyиmatplotlib, а еще есть обработка изображений и зрениеopencvи машинное обучениеtensorflowУстановка более сложная, обычно используется в этом полеanacondaРешение, чей вики описывает это следующим образом:
Anaconda — это бесплатный дистрибутив языка Python с открытым исходным кодом для крупномасштабной обработки данных, прогнозной аналитики и научных вычислений, предназначенный для упрощения управления пакетами и их развертывания. Anaconda использует систему управления пакетами Conda для управления пакетами.
я выбираюanaconda3,в использованииiterm2, после завершения установки возникнет проблема с путем, вам нужно~/.zshrcдобавлять:
export PATH="/anaconda3/bin:$PATH"
Затем посетите и используйте следующую команду для просмотра среды anaconda.
➜ ~ which conda
/anaconda3/bin/conda
➜ ~ conda --version
conda 4.5.11
Создайте виртуальную среду и войдите в виртуальную среду:
conda create --name python36 python=3.6
➜ ~ source activate python36
(python36) ➜ ~
(python36) ➜ ~ python -V
Python 3.6.7 :: Anaconda, Inc.
(python36) ➜ ~ source deactivate
➜ ~
ПроверятьcondaСписок управляемых сред:
➜ ~ conda info -e
# conda environments:
#
base * /anaconda3
python36 /anaconda3/envs/python36
AnacondaОн мало используется в процессе личных исследований и разработок.Если вы хотите узнать больше, вы можете прочитатьРуководство по установке Anaconda для начала работы.
Среда Python в эпоху докеров
Описанное выше содержимое настраивается локально для создания различных сред. Но локально есть только один.После нескольких подбрасываний все еще легко испортить.Докер настолько мощный, что мы также можем использовать его для игры в разработку на Python.
Во-первых, мы пишемhello.py, код показан ниже:
# -*- coding:utf-8 -*-
def test():
print "Hello, python, docker"
if __name__ == "__main__":
test()
Затем выполните следующую команду:
docker run -it --rm --name docker-python2 -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:2.7.16-alpine3.9 python hello.py
Результаты команды следующие:
Unable to find image 'python:2.7.16-alpine3.9' locally
2.7.16-alpine3.9: Pulling from library/python
8e402f1a9c57: Already exists
d8cdc394c05b: Pull complete
1e2b4a75cc6b: Pull complete
2fbbf60d928e: Pull complete
Digest: sha256:46d6e67d464a2811efe60440248623b14cb6db273fac59631dd8bd9e13a77491
Status: Downloaded newer image for python:2.7.16-alpine3.9
Hello, python, docker
Обратите внимание, что загрузка файла зеркала будет выполняться в первый раз, что относительно медленно, после успешной загрузки скрипт будет выполнен снова очень быстро.
Команда docker здесь более сложная, поэтому вы можете сначала игнорировать ее значение. мы продолжаем писатьhello3.py, код показан ниже:
# -*- coding:utf-8 -*-
def test():
print("Hello, python, docker")
if __name__ == "__main__":
test()
Выполните с помощью следующей команды:
docker run -it --rm --name docker-python3 -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3.7.3-alpine3.9 python hello3.py
Результат выполнения следующий:
Unable to find image 'python:3.7.3-alpine3.9' locally
3.7.3-alpine3.9: Pulling from library/python
Digest: sha256:11568bb68bd375727e468ea5995f556139ff305eed9d8ee1d04b1a4a03a6486a
Status: Downloaded newer image for python:3.7.3-alpine3.9
Hello, python, docker
Кратко разберемся в значении запуска команды:
➜ python docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-i, --interactive Keep STDIN open even if not attached
...
--rm Automatically remove the container when it exits
...
-t, --tty Allocate a pseudo-TTY
...
-v, --volume list Bind mount a volume
--volume-driver string Optional volume driver for the container
--volumes-from list Mount volumes from the specified container(s)
-w, --workdir string Working directory inside the container
docker run -it --rm --name docker-python2 -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:2.7.16-alpine3.9 python hello.pyПеревод означает следующее:
- Используйте образ python:2.7.16-alpine3.9 для запуска контейнера, где python — это имя образа, а 2.7.16-alpine3.9 — метка версии.
- Имя контейнера называется Docker-Python2, и вывод информации на текущий терминал автоматически удаляется после запуска контейнера.
- Контейнеры объема данных, внутренний контейнер и текущий каталог
/usr/src/myappкаталог для карты. - настраивать
/usr/src/myappв качестве рабочего каталога, затем запуститеpython hello.pyЗаказ.
Таким образом, после вышеуказанных шагов мы используем контейнер докеров для выполненияhello.py. И у нас также есть 2 зеркала, которые могут выполнять код python2 и python3 соответственно. Конечно, в реальном проекте просто запустите py-файл.
Это немного похоже на убийство цыплят ножом.Если вы выполняете проект django, вы можете поддерживать согласованность среды разработки и среды развертывания. Эту часть содержания я добавлю во вступление.
Совет: Docker и Venv / Pipenv также могут быть использованы вместе, просто создайте виртуальную среду в текущем каталоге и оставьте его всем, чтобы исследовать.
обзор
Наконец, давайте кратко рассмотрим виртуальную среду Python:
- Использование виртуальной среды Python может эффективно устранять различия в версиях синтаксиса Python и сценариях использования.
- использоватьpipУстанавливайте различные пакеты.
- python3 поставляется сvenvСоздавайте и управляйте различными средами.
- pipenv — это метод управления средой, который смешивает pip и venv.
- использоватьanacondaУправление средами научных вычислений Python.
- Среду python можно использовать с помощью докера и т. д.
приложение
Если вы продолжаете использовать python2, вы можете обратиться к следующим частям. Виртуальная среда virtualenv&virtualenvwrapper для python2.
virtualenvЭто инструмент для создания изолированной среды Python, вы можете создать файл, содержащий все необходимые исполняемые файлы, и использовать необходимую пакет Engineering Python.
virtualenvУстановка очень проста, прямо использовать следующую команду:
pip install virtualenv
Вы можете столкнуться с проблемами доступа, вы можете использовать sudo для эскалации
ноvirtualenvОдин недостаток — каждый раз, когда создается venv в текущем каталоге (pycharm использует этот метод по умолчанию), каждый раз нужно запоминать другой каталог виртуальной машины, что не очень удобно в использовании. Здесь мы просто пропускаемvirtualenvиспользовать, продолжать использовать его пакет расширенияvirtualenvwrapper
virtualenvwrapperУстановка также очень проста, достаточно использовать следующую команду:
pip install virtualenvwrapper
!Примечание: пользователи Windows используют команду pip install virtualenvwrapper-win, за которой следует **-win**
использоватьvirtualenvwrapperСначала вам нужно установить переменные среды, я используюiTerm2настроенzshrc, должен находиться в корневом каталоге пользователя.zshrcДобавьте следующие 2 строки в:
export WORKON_HOME=~/codes/venv
source /usr/local/bin/virtualenvwrapper.sh
После настройки переменных среды выйдите и перезапуститеtermЭффект.
Создаватьflaskсреда разработки
mkvirtualenv flask
Using base prefix '/Library/Frameworks/Python.framework/Versions/2.7'
New python executable in /Users/tu/codes/venv/flask/bin/python
Also creating executable in /Users/tu/codes/venv/flask/bin/python
Installing setuptools, pip, wheel...done.
virtualenvwrapper.user_scripts creating /Users/tu/codes/venv/flask/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/tu/codes/venv/flask/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/tu/codes/venv/flask/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/tu/codes/venv/flask/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/tu/codes/venv/flask/bin/get_env_details
(flask) ➜ pytest
Обратите внимание, что после того, как виртуальная среда будет создана, она автоматически войдет в среду, а имя текущей среды будет отображаться перед командной строкой, например (flask) символы.
Создайте еще одну среду разработки искателя
mkvirtualenv spider
...
Таким образом, вы можете установить библиотеку flask в среде flask и библиотеку запросов в среде паука, не беспокоясь о конфликтах зависимостей.
Если вы хотите создать версию среды python3, вам необходимо сначала установить python3, а затем использовать следующую команду:
# -p 参数指定版本,可以使用python3的绝对路径
mkvirtualenv py3studio -p python3
Другие распространенные команды:
# 列出env列表
workon
# 进入指定的env
workon name
# 退出当前env
deactivate
# 删除env
rmvirtualenv name
хорошо, мы использовали pip для установки virtualenv и virtualenvwrapper, которые успешно решили проблему разных версий python, и мы можем счастливо разрабатывать (играть).