前言

近期的项目中,我开始尝试着从virtualenv管理python虚拟环境,切换到用pipenv来管理。

经过一段时间的使用,着实觉得pipenv使用的更加顺手,更加的便捷。这当然也延续了 Kenneth 大神一贯的项目作风-- For Humans 。

再配合上 autoenv(自动激活虚拟环境的工具),更加的Perfect!

pipenv + autoenv 的使用

安装

我们通过pip即可快速安装

  1. pip install autoenv # 安装 autoenv
  2. pip install pipenv # 安装 pipenv

注:这里简单略过安装部分,网上大把的教程有教如何在各个系统环境下安装,不是本文的主要内容

pipenv 的使用

前提:假设我们在用户目录 ~ 下有一个项目叫 my_project/

我们首先进入项目目录:

  1. cd ~/my_project

进入项目以后,如果直接执行 pipenv installpipenv 会根据系统默认的python版本,来创建虚拟环境。(前提是本项目中不存在已有的Pipfile,如果有,它会去根据Pipfile安装对应的版本和Pipfile中记录的依赖库)。

但是我们一般会创建虚拟环境的时候指定python版本,就需要配上 --two或者--three 这个参数:

  • --two 使用python2来创建虚拟环境
  • --three 使用python3来创建虚拟环境
  1. pipenv install --three # 需要确保系统中存在python3版本

下面是执行后的输出信息:

  1. Creating a virtualenv for this project
  2. Using /usr/local/bin/python3 to create virtualenv
  3. # 这里可以看到继承自哪个python版本
  4. Running virtualenv with interpreter /usr/local/bin/python3 Using base prefix '/usr/local'
  5. New python executable in /root/.local/share/virtualenvs/my_project-dhpIKgdN/bin/python3
  6. Also creating executable in /root/.local/share/virtualenvs/my_project-dhpIKgdN/bin/python
  7. Installing setuptools, pip, wheel...done.
  8. # 这里可以看到虚拟环境安装的位置
  9. Virtualenv location: /root/.local/share/virtualenvs/my_project-dhpIKgdN
  10. Creating a Pipfile for this project
  11. Pipfile.lock not found, creating
  12. Locking [dev-packages] dependencies
  13. Locking [packages] dependencies
  14. Updated Pipfile.lock (625834)!
  15. Installing dependencies from Pipfile.lock (625834)…
  16. ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 0/0 00:00:00
  17. To activate this project's virtualenv, run the following:
  18. $ pipenv shell # 要激活该虚拟环境,执行这条指令

这将在项目目录中创建两个新文件 Pipfile 和 Pipfile.lock

  • Pipfile 存放着当前虚拟环境的配置信息,包含python版本,pypi源,以及项目安装的依赖库。

    • pipenv根据这个来寻找项目的根目录。
    • Pipfile 文件是 TOML 格式而不是 requirements.txt 那样的纯文本。[1]
    • 一个项目对应一个 Pipfile,支持开发环境与正式环境区分。默认提供 default 和 development 区分
    • Pipfile.lock 顾名思义,这个文件时对于Pipfile的一个锁定。支持锁定项目不同的版本所依赖的环境.

激活虚拟环境, 在当前目录执行下面的指令即可:

  1. pipenv shell

创建 .env 文件

如果你和我一样想要使用 autoenv 来自动激活虚拟环境,就在当前项目的根目录下面,创建一个名为 .env 的文件,将 pipenv shell 写进去。具体使用在后面说明。

如果没有这个需求,可以忽略这一段话。

更新 pypi源来提高依赖库安装的速度

在使用pipenv的时候,常常会在安装的时候,一直卡在了 Locking 这里,通过加上 -v 参数,可以看到安装过程中的步骤信息,卡在了下载那里,这时应该可以意识到是因为网络的原因,pipenv创建的 Pipfile 中默认的pypi源是python官方的 https://pypi.python.org/simple。我们国内用户访问下载的时候会很慢。

所以,我一般会在创建好Pipfile以后,修改到文件中 source 块下的 url 字段,设置为国内的 pypi 源就好了,我推荐的是清华的pypi源,具体设置如下:

备注:我还没有找到如何修改能在创建时就设好的方法,应该修改源码是可以的,但这样不尊重源码,毕竟高墙是我们自己筑起的,如果有好的方法,您不妨在评论中告诉我一下
  1. [[source]]
  2. url = "https://pypi.tuna.tsinghua.edu.cn/simple"
  3. verify_ssl = true
  4. name = "pypi"

管理Python依赖关系

Pipfile 包含关于项目的依赖包的信息,并取代通常在Python项目中使用的 requirements.txt 文件。 如果你之前的项目中存在requirements.txt文件,pipenv 可以很轻松的安装 requirements.txt 中的依赖包。

  1. pipenv install -r requirements.txt
  2. # 或者
  3. pipenv install --requirements requirements.txt

可以通过更新 Pipfile.lock 来冻结软件包名称及其版本以及其自己的依赖关系的列表。 这时需要使用lock关键字来完成,

  1. pipenv lock

如果我们想要在虚拟环境中安装某个指定的库,比如 requests, 直接在 install 后面跟上就可以了:

  1. pipenv install requests

如果想查看当前环境中第三方包之间的依赖关系,可以通过 pipenv graph 来查看:

  1. [root@VM_27_243_centos my_project]# pipenv graph
  2. requests==2.18.4
  3. - certifi [required: >=2017.4.17, installed: 2018.1.18]
  4. - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]
  5. - idna [required: <2.7,>=2.5, installed: 2.6]
  6. - urllib3 [required: <1.23,>=1.21.1, installed: 1.22]

从输出可以看出,我们按照的 requests 包,依赖于其他的四个包,pipenv 帮你自动管理着这些包这件的依赖关系、。我们可以看到 requests 依赖于 urllib3, 假设我们再安装一个包,并且这个包也同样依赖着 urllib3 ,当我们要卸载掉 requests 的时候,pipenv会自动检测这些包之间的依赖关系,因为 urllib3 依旧有其他包依赖,所以会保留,只会卸载掉其他的依赖库。(卸载的指令是pipenv uninstall

退出虚拟环境

任何时候想退出虚拟环境,只需一条简单的 exit 指令即可

  1. exit

autoenv 的使用

安装好 autoenv 以后,autoenv 可以在进入项目之后自动检测项目目录的 .env 文件激活项目所需的虚拟环境,这样能够保证每次切换不同项目的时候,都能自动进入相应项目所依赖的虚拟环境。

要实现 autoenv 自动识别项目目录中的 .env 文件,需要将 autoenv 的激活脚本添加到终端的 profile 中:

  1. # bash 的话,执行这一条指令
  2. echo "source `which activate.sh`" >> ~/.bashrc
  3. # zsh 的话,执行这一条指令
  4. echo "source `which activate.sh`" >> ~/.zshrc

这样就配置好了 autoenv 了,当 cd 到项目目录中后,就会自动激活虚拟环境了,如果是第一次,系统会提示你确认是否以后都自动激活,输入 y ,然后回车确认即可。

* pipenv 详细参数和指令说明[2][3]

pipenv

  1. pipenv [OPTIONS] COMMAND [ARGS]...

Options:

  • --upgrade

    更新pipenv&pip到最新版本

  • --where

    输出项目根目录信息

  • --venv

    输出虚拟环境信息

  • --py

    输出python解释器的信息

  • --envs

    输出环境变量信息

  • --rm

    删除当前虚拟环境

  • --bare

    精简输出

  • --man

    显示帮助手册页面

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --site-packages

    为虚拟环境启用site-packages

  • --version

    显示版本并退出

check

检查装的包的安全性

  1. pipenv check [OPTIONS] [ARGS]...

Options:

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --system

    使用系统的Python

  • --unused \<unused>

    指定项目路径,显示可能未使用的依赖关系。

clean

卸载未在pipfile.lock中指定的所有软件包

  1. pipenv clean [OPTIONS]

Options:

  • -v,--verbose

    详细信息模式

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --dry-run

    只输出不需要的包

graph

显示当前安装的依赖关系图信息

  1. pipenv graph [OPTIONS]

Options:

  • --bare

    最小的输出 (备注:这个不太理解,尝试过指定了这个参数会输出所有的包,不指定却只输出pip安装的包,感觉和官方注释相反)

  • --json

    输出JSON格式

  • --reverse

    逆转依赖关系图

install

安装参数提供的软件包并将它们添加到pipfile,如果没有提供参数,就安装所有软件包。

  1. pipenv install [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...

Options:

  • -d, --dev

    在[dev-packages]中安装软件包

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --system

    系统pip管理

  • -r, --requirements \<requirements>

    导入一个requirements.txt文件。

  • -c, --code \<code>

    从代码库导入

  • -v, --verbose

    详细信息模式

  • --ignore-pipfile

    在安装时忽略pipfile,使用pipfile.lock

  • --sequential

    一次只安装一个依赖项,而不是同时安装。

  • --skip-lock

    相反,在安装时忽略锁定机制 - 使用pipfile

  • --deploy

    如果pipfile.lock过时或python版本错误则中止

  • --pre

    允许预发布

  • --keep-outdated

    防止在pipfile.lock中更新过时的依赖关系

  • --selective-upgrade

    更新指定的包

Arguments:

  • PACKAGE_NAME

    包名(可选参数)

  • MORE_PACKAGES

    多个包(可选参数)

lock

生成pipfile.lock

  1. pipenv lock [OPTIONS]

Options:

  • -v,--verbose

    详细信息模式

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • -r, --requirements

    生成与requirements.txt兼容的lock文件

  • -d, --dev

    生成与requirements.txt兼容的开发模式依赖项

  • --clear

    清除依赖关系缓存

  • --pre

    允许预发布

  • --keep-outdated

    防止在pipfile.lock中更新过时的依赖关系

open

在编辑器中查看指定的模块

  1. pipenv open [OPTIONS] MODULE

Options:

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

MODULE

模块名(必填项)

run

运行一个虚拟环境中的命令(就是在未激活虚拟环境时可以直接用虚拟环境的python执行)

  1. pipenv run [OPTIONS] COMMAND [ARGS]...

Options:

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

Arguments

  • COMMAND

    命令(必填项)

  • ARGS

    参数(可选项)

shell

在虚拟环境中产生一个shell(就是激活虚拟环境)

  1. pipenv shell [OPTIONS] [SHELL_ARGS]...

Options:

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --fancy

    以好看的模式运行shell(用于如果优化过配置的shell)

  • --anyway

    产生一个子shell,即使已经在虚拟环境中

    这个比较很少用,但就是虚拟环境中的虚拟环境,执行后在终端前面看到两个虚拟环境的括号:

    (my_project-dhpIKgdN) (my_project-dhpIKgdN) [root@centos my_project]#

Arguments:

  • SHELL_ARGS

    可选项

sync

安装所有在pipfile.lock中指定的软件包

  1. pipenv sync [OPTIONS]

Options:

  • -v,--verbose

    详细信息模式

  • -d, --dev

    另外在[dev-packages]中安装软件包

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --bare

    精简输出

  • --clear

    清除依赖关系缓存

  • --sequential

    一次只安装一个依赖项,而不是同时安装

uninstall

卸载指定的软件包并将其从pipfile中删除

  1. pipenv uninstall [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...

Options:

  • -v,--verbose

    详细信息模式

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • --system

    系统的pip管理

  • --lock

    卸载之后锁定

  • --all-dev

    从[dev-packages]中卸载所有软件包

  • --all

    从虚拟环境中清除所有包。但不会编辑pipfile

  • --keep-outdated

    防止在pipfile.lock中更新过时的依赖关系

Arguments:

  • PACKAGE_NAME

    包名(可选参数)

  • MORE_PACKAGES

    多个包(可选参数)

update

更新指定包

  1. pipenv update [OPTIONS] [PACKAGES]...

Options:

  • -d, --dev

    在[dev-packages]中安装软件包

  • --three, --two

    使用python3/2创建虚拟环境

  • --python \<python>

    指定应该使用哪个版本的Python虚拟环境

  • -v, --verbose

    详细信息模式

  • --clear

    清除依赖关系缓存

  • --bare

    精简输出

  • --pre

    允许预发布

  • --keep-outdated

    防止在pipfile.lock中更新过时的依赖关系

  • --sequential

    一次只安装一个依赖项,而不是同时安装

  • --outdated

    列出过时的依赖关系

  • --dry-run

    列出过时的依赖关系

使用pipenv管理python虚拟环境的更多相关文章

  1. 用pipenv管理python虚拟环境

    python的虚拟环境可以为项目创建一个独立的环境,能够解决使用不同版本依赖给项目带来冲突的麻烦.创建虚拟环境的方式有很多种,pipenv会自动帮你管理虚拟环境和依赖文件,并且提供了一系列命令和选项来 ...

  2. Pipenv和Python虚拟环境

    Pipenv & 虚拟环境 本教程将引导您完成安装和使用 Python 包. 它将向您展示如何安装和使用必要的工具,并就最佳做法做出强烈推荐.请记住, Python 用于许多不同的目的.准确地 ...

  3. 使用pipenv管理python项目

    入门 首先使用pip安装Pipenv及其依赖项, pip install pipenv 1 然后将目录更改为包含你的Python项目的文件夹,并启动Pipenv, cd my_project pipe ...

  4. pipenv管理python开发环境

    简介 简单说,pipenv就是把pip和virtualenv包装起来的一个便携工具. 它不会在你的项目文件夹里生成一大堆东西,只有两个文本文件: Pipfile, 简明地显示项目环境和依赖包. Pip ...

  5. 管理python虚拟环境的工具virtuelenvwrapper

    virtuelenvwrapper出现的原因 virtualenv 的一个最大的缺点就是: ​ 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就 ...

  6. 使用virtualenvwrapper模块管理python虚拟环境

    1.pip安装virtualenvwrapper [root@localhost ~]# pip install virtualenvwrapper # 安装virtualenvwrapper [ro ...

  7. 使用conda管理python环境和包

    操作系统:CentOS7使用virtualenv管理python虚拟环境virtualenv是一款轻量级第三方虚拟环境管理工具,不像Anaconda大小达上百M,virtualenv大小只有10M左右 ...

  8. Python虚拟环境和包管理工具Pipenv的使用详解--看完这一篇就够了

    前言 Python虚拟环境是一个虚拟化,从电脑独立开辟出来的环境.在这个虚拟环境中,我们可以pip安装各个项目不同的依赖包,从全局中隔离出来,利于管理. 传统的Python虚拟环境有virtualen ...

  9. Pipenv——最好用的python虚拟环境和包管理工具

    pipenv 是Kenneth Reitz大神的作品,能够有效管理Python多个环境,各种包.过去我们一般用virtualenv搭建虚拟环境,管理python版本,但是跨平台的使用不太一致,且有时候 ...

随机推荐

  1. CentOS 7安装docker和常用指令

    1.安装 yum -y install docker 2.启动 systemctl start docker // 启动 docker -v //查看版本号 systemctl stop docker ...

  2. Winsock 编程详解

    转载请注明出处!本文地址:https://www.cnblogs.com/teternity/p/WinSock.html Winsock 编程 目录 通用函数讲解 WSAStartup WSACle ...

  3. servercat IOS Linux监控 SSH客户端

    servercat IOS Linux监控 SSH客户端 iOS 平台上新出的一个挺有趣的服务器监控 + SSH 客户端. 监控服务器状态,内存.CPU.网络 还能对Docker容器进行监控 价格:¥ ...

  4. 部署Prometheus+Grafana监控

    Prometheus 1.不是很友好,各种配置都手写 2.对docker和k8s监控有成熟解决方案 Prometheus(普罗米修斯) 是一个最初在SoudCloud上构建的监控系统,开源项目,拥有非 ...

  5. centos 7.0 更改启动环境/启动进入图形界面/命令行模式

    当前我桌面模式 systemctl set-default multi-user.target ln -sf /lib/systemd/system/multi-user.target /etc/sy ...

  6. 自动创建新序列号的Cookies脚本

    已知一个网站在被访问的时候会读取电脑上存储的cookies 如果已经有cookie变量存在 则在存在的变量后按顺序增加新的序列 如电脑上有vst1变量的cookie了 那么新用户则自动创建为 vst2 ...

  7. k8s集群,使用pvc方式实现数据持久化存储

    环境: 系统 华为openEulerOS(CentOS7) k8s版本 1.17.3 master 192.168.1.244 node1 192.168.1.245 介绍: 在Kubernetes中 ...

  8. day42 Pyhton 并发编程05

    一.内容回顾 # 线程 # 正常的编程界: # 进程 # 计算机中最小的资源分配单位 # 数据隔离 # 进程可以独立存在 # 创建与销毁 还有切换 都慢 给操作系统压力大 # 线程 # 计算机中能被C ...

  9. centos7虚拟机时间和本地时间相差8小时

    安装ntp和ntpdate 在安装centos7虚拟机的时候,已经将时区设置为了Asia/shanghai,但还是出现时间不准,相差了8小时 可以安装ntp和ntpdate,使用 NTP 公共时间服务 ...

  10. spring boot:spring security+oauth2+sso+jwt实现单点登录(spring boot 2.3.3)

    一,sso的用途 ? 1,如果有多个应用系统,用户只需要登录一次就可以访问所有相互信任的应用系统. 不需要每次输入用户名称和用户密码, 也不需要创建并记忆多套用户名称和用户密码. 2,系统管理员只需维 ...