python多版本和虚拟环境(pyenv+conda or virtualenv)

Python013

python多版本和虚拟环境(pyenv+conda or virtualenv),第1张

2.7.X

3.X

Anaconda2

Anaconda3

pyenv是一个管理各个python版本的管理器。可以在系统里同时保留多个python版本,等需要时定义需要的版本。

项目地址

看项目地址中的readme

查看pyenv可安装的版本列表

安装和卸载指定版本,会将python版本安装在 $(pyenv root)/versions/ 中

查看当前已经安装了的python版本。输出内容中,system关键字是系统python版本。 *表示当前环境所处的版本。

全局切换为anaconda科学计算环境(不建议这么做),做了如果要恢复,则将最后一个参数改为--unset

当前环境接环。在当前目录以下。如果要恢复,则将最后一个参数改为--unset

本来这是一个单独的软件用来虚拟一个python版本环境,让每个工作环境都有一套独立的python各自的第三方插件互不影响。然而在 pyenv 下有一个插件 pyenv-virtualenv 他可以在 pyenv 的环境下担负起 virtualenv 的事情。(如果使用的是原生python可以用这个工具,如果用的是anaconda则不用这个,用下一章说的conda工具来完成虚拟环境)

项目地址

看项目地址中的readme

在当前目录下创建一个 python 版本为2.7.1的环境,环境名字为 env271。 这个环境的真实目录位于 ~/.pyenv/versions/

(创建时并不激活)激活当前环境。此时已经进入虚拟环境,在当前环境下所有pip等操作都不会影响系统环境和系统路径。

离开已激活的环境,切换回系统环境。但并没有被删除,下次依旧可以启动。

删除一个环境,当然也可以到真实目录下删除文件夹。

本来不想用这个的,但是因为 pyenv-virtualenv 有一些问题,无法很好的管理conda环境,比如有一些anaconda 自带的一些命令(例如pylint)无法被使用。因此还是老老实实使用 conda 来管理虚拟环境。

conda 是自带于 anaconda 的所以并不需要额外安装,如果在 anaconda 环境中就可以使用。conda 不仅可以进行 环境管理 ,还可以 包管理 ,和对 anaconda和conda 进行 版本升级

由于conda使用方法太多,因此这里罗列一些常用的主要是一些虚拟环境的命令。具体的到 官网文档 去查看一下。

首先conda工具是需要在anaconda环境下的,因此先执行 pyenv local anaconda3-4.2.0 进入anaconda环境后就可以执行conda工具了。

创建一个虚拟环境。可以指定名字,指定包,甚至制定python(这样的话就python版本管理了所以不建议使用,python版本管理交给pyenv),所以命令中 python=x.x 可以不写

罗列已经创建的环境,两条命令是一样的。

激活一个环境。和virtualenv一样,创建不等于激活。激活后才能真正使用虚拟环境。

如果发生错误 Error: activate must be sourced. Run 'source activate envname' 说明activate命令没有找对,导致错误。吧命令改成

这样就能成功建立虚拟环境了。

删除一个虚拟环境。

复制一个虚拟环境。这个是个不错的好功能。

conda还能吧环境配置文件导出,在另一台机器上重新读入配置文件,就能复刻你的环境了。

conda 还能进行包的管理。调用的是 pip 所以也很棒。

查看当前环境已安装包,用-n指定后,就是查看某个环境下的已安装包

为某个指定的环境安装包,升级包,删除包。

它还能升级自身和anaconda和python的版本。

它和pip一样也能设置安装包的镜像位置。其余还有能使用R命令等等,都到官网文档中搜索一下。

当我们对变量进行命名时,变量名是区分大小写的,变量的命名需要遵循以下规则:

1、变量名只能由数字、字母和下划线组成。

2、变量名的第一个符号只能是字母或者是下划线,不能是数字。

3、关键字不可以作为变量名。

4、如果在程序中已经定义了一个变量名,在变量的作用域内不能再定义同名的变量。

2、给变量赋值:

当我们在程序当中声明变量时,还可以对变量进行初始化,在每个变量名后面给变量赋初始值,这个初始值可以是数值,也可以是表达式,实质上,这个初始化的过程也是给变量赋值的过程。

一、简介

Poetry 是一个Python 中的好用的包管理工具。在 Python 中,打包系统和依赖管理非常复杂:一个项目经常要同时创建多个文件,例如:

setup.py

requirements.txt

setup.cfg

MANIFEST.in

Pipfile

基于此, poetry 将所有的配置都放置在一个 toml 文件中,包括:依赖管理、构建、打包、发布等,可谓是简单方便。

二、安装

Poetry 要求 Python 版本为 2.7 或者 3.5+。Poetry 官方提供了一个脚本,可以快速方便地进行安装。

osx / linux / bashonwindows 安装:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -

windows powershell 安装:

(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python -

Poetry 会被安装在系统中的如下位置:

$HOME/.local/bin Unix系统

%APPDATA%\Python\Scripts Windows系统

然后把路径添加到系统变量 PATH 中,即可使用 poetry 命令调用:

poetry --version

卸载:

python install-poetry.py --uninstall

POETRY_UNINSTALL=1 python install-poetry.py

如果你想要改变安装的默认路径,可以设置 POETRY_HOME :

POETRY_HOME=/etc/poetry python install-poetry.py

除了官方的安装脚本,也可以使用 pipx 或者 pip 进行安装:

pipx install poetry

pipx upgrade poetry

pipx uninstall poetry

pip install --user poetry

更新:

poetry self update

三、基础使用

在已有项目中执行:

poetry init

该命令创建了一个pyproject.toml 文件。你可以手动修改 pyproject.toml 文件添加依赖,然后运行:

poetry install

也可以执行 add 命令安装具体某个模块并自动添加到 pyproject.toml:

$ poetry add xxxx

默认情况下,poetry会在 {cache-dir}/virtualenvs 下创建虚拟环境,你也可以手动修改该配置项,或者在 pyproject.toml 配置[virtualenvs.in-project] 在你的项目目录中创建虚拟环境。

你可以使用 run 命令在虚拟环境中运行脚本:

poetry run python your_script.py

或者直接激活你的虚拟环境,新建一个 shell 运行:

poetry shell

只安装dependencies :

poetry install --no-root

更新所有锁定版本的依赖:

poetry update

四、命令选项

全局选项:

--verbose (-v|vv|vvv): "-v" 正常输出, "-vv" 详细输出 "-vvv" debug

--help (-h) : 帮助信息

--quiet (-q) : 不输出任何信息

--ansi: 强制 ANSI 输出

--no-ansi: 禁止ANSI 输出

--version (-V): 显示版本

--no-interaction (-n): 禁止交互询问

NEW:

poetry new my-package

创建项目模板,项目结构如下所示:

my-package

├── pyproject.toml

├── README.md

├── my_package

│ └── init .py

└── tests

└── init .py

init:创建pyproject.toml文件 。

install:读取pyproject.toml并安装依赖,它具有如下这些选项:

--without: 忽略依赖

--with: 安装可选的依赖

--only: 只安装指定的依赖

--default: 只安装默认的依赖

--sync: 同步锁定的版本至环境中

--no-root: 不安装根依赖包

--dry-run: 输出操作但不执行

--extras (-E): 安装额外的包

update:升级包

poetry update

不指定任何包时,更新所有,也可以指定升级包:

poetry update requests toml

它具有如下选项:

--dry-run : 输出操作但不执行

--no-dev : 不按照开发依赖

--lock : 只更新锁定不安装

add: 添加依赖并安装

限制范围:

poetry add pendulum@^2.0.5

poetry add "pendulum>=2.0.5"

它具有如下选项:

--group (-D): 分组

--editable (-e): 添加到编辑模式

--extras (-E): 添加额外的依赖

--optional: 添加至可选依赖

--python: 指定python版本

--platform: 指定操作系统

--source: 使用源名称安装

---allow-prereleases: 接受 prereleases 安装

--dry-run: 输出操作但不执行

--lock: 只更新锁定不安装

remove:移除依赖

它具有如下选项:

--group (-D): 分组

--dry-run : 输出操作但不执行

show:列出所有的可安装的包

如果你想看具体某个包的信息:

poetry show pendulum

name: pendulum

version : 1.4.2

description : Python datetimes made easy

dependencies:

--without: 忽略依赖

--with: 同时显示

--only: 只显示指定的依赖

--default: 只显示默认的

--no-dev: 不显示开发的依赖

--tree: 以树状形式显示

--latest (-l): 展示最新的版本

--outdated (-o): 显示最新版本,但仅适用于过时的软件包

build:构建

publish:发布

config:配置项

使用方法:

poetry config [options] [setting-key] [setting-value1] ... [setting-valueN]

它具有如下选项:

--unset: 删除配置项

--list: 展示现在的配置

run:在虚拟环境中执行命令

shell:激活虚拟环境

check:检查pyproject.toml文件

search:搜索远程包

lock:锁定版本

version:显示版本

export:导出锁定的文件为其他的格式

poetry export -f requirements.txt --output requirements.txt

它具有如下选项:

--format (-f): 转换的格式,暂时只支持requirements.txt

--output (-o): 输出文件名字

--dev: 包括开发的依赖

--extras (-E): 额外的依赖

--without-hashes: 忽略哈希

--with-credentials: 包括合格证书

env:与虚拟环境进行交互

cache:缓存

显示缓存列表:

poetry cache list

清除缓存:

poetry cache clear pypi --all

plugin:插件

安装插件:

poetry plugin add poetry-plugin

显示插件列表:

poetry plugin show

移除插件:

poetry plugin remove poetry-plugin

source: 仓库源

添加源:

poetry source add pypi-test https://test.pypi.org/simple/

显示仓库源列表:

poetry source show

移除:

poetry source remove pypi-test

五、配置

你可以运行config命令进行配置,或者直接修改config.toml文件,这个文件通常位于:

macOS: ~/Library/Application Support/pypoetry

Windows: C:\Users<username>\AppData\Roaming\pypoetry

Unix~/.config/pypoetry

可以使用--local命令对具体项目进行配置:

poetry config virtualenvs.create false --local

配置项:

cache-dir缓存目录

installer.parallel并行安装

virtualenvs.create如果不存在,则新建一个虚拟环境

virtualenvs.in-project在项目根目录创建虚拟环境

virtualenvs.path虚拟环境路径

virtualenvs.options.always-copy复制源文件还是创建链接到虚拟环境

virtualenvs.options.system-site-packages虚拟环境获得系统包的权限

repositories.<name>设置一个新的可选仓库

六、依赖配置

依赖的配置有很多种写法:

版本限制:

尖括号:^1.2 代表 >=1.2.0 <2.0.0

波浪号:~1.2.3 代表 >=1.2.3 <1.3.0

星号:1.* 代表 >=1.0.0 <2.0.0

使用git仓库:

[tool.poetry.dependencies]

requests = { git = " https://github.com/requests/requests.git " }

使用本地路径:

[tool.poetry.dependencies]

my-package = { path = "../my-package/", develop = false }

my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }

使用URL:

[tool.poetry.dependencies]

my-package = { url = " https://example.com/my-package-0.1.0.tar.gz " }

python限制:

[tool.poetry.dependencies]

pathlib2 = { version = "^2.2", python = "~2.7" }

环境限制:

[tool.poetry.dependencies]

pathlib2 = { version = "^2.2", markers = "python_version ~= '2.7' or sys_platform == 'win32'" }

组合:

[tool.poetry.dependencies]

foo = [

{version = "<=1.9", python = "^2.7"},

{version = "^2.0", python = "^3.4"}

]

如果限制很多,写成一行不方便阅读,可以写成多行:

[tool.poetry.group.dev.dependencies]

black = {version = "19.10b0", allow-prereleases = true, python = "^3.6", markers = "platform_python_implementation == 'CPython'"}

写成多行后:

[tool.poetry.group.dev.dependencies.black]

version = "19.10b0"

allow-prereleases = true

python = "^3.6"

markers = "platform_python_implementation == 'CPython'"

分组功能:

[tool.poetry.group.test.dependencies]

pytest = "^6.0.0"

pytest-mock = "*"

例如以上,就建立了一个test的组合的依赖。

下面这两种写法是等价的:

[tool.poetry.dev-dependencies]

pytest = "^6.0.0"

pytest-mock = "*"

或者:

[tool.poetry.group.dev.dependencies]

pytest = "^6.0.0"

pytest-mock = "*"

以上两种写法都声明了一个dev的组的依赖。

声明组合是可选的,这在具体的环境中有的特定的用途时很有用:

[tool.poetry.group.docs]

optional = true

[tool.poetry.group.docs.dependencies]

mkdocs = "*"

添加依赖到组中:

poetry add pytest --group test

同步依赖,只使用poetry.lock中的依赖,移除其他不是必须的依赖:

poetry install --sync

七、环境管理

Poetry可以为项目使用独立的虚拟环境,而不是使用系统安装的。

切换环境:

poetry env use /full/path/to/python

poetry env use python3.7

poetry env use system

显示当前激活的环境信息:

poetry env info

运行命令会输出如下信息:

Virtual environment

Python: 3.7.1

Implementation: CPython

Path: /path/to/poetry/cache/virtualenvs/test-O3eWbxRl-py3.7

Valid: True

System

Platform: darwin

OS: posix

Python: /path/to/main/python

列出所有的虚拟环境列表:

poetry env list

删除环境:

poetry env remove /full/path/to/python

poetry env remove python3.7

poetry env remove 3.7

poetry env remove test-O3eWbxRl-py3.7