未加星标

Python 包管理及虚拟环境的应用(一)

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二05 | 时间 2019 | 作者 红领巾 ] 0人收藏点击收藏

话说 python 的哲学之一就是:用一种方法,最好是只有一种方法来做一件事。可以用 python -m this 或在 python 交互界面下 import this 看到 The Zen of Python 有一句:

There should be one-- and preferably only one --obvious way to do it.

然而 Python 在关于包管理(依赖管理)一事上却让人面临了众多的选择。

即使是 Java 日趋发展庞大的今天,包管理工具也没有如今的 Python 复杂,Java 的包管理工具经历了手工下载 jar 包,Maven, Ant+Ivy, Gradle, sbt, 但主流的也就 Maven 和 Gradle, 并且它们兼具项目构建的功能。

这里有一个 Python 包管理工具变迁的视频: Kenneth Reitz - Pipenv: The Future of Python Dependency Management - PyCon 2018 。再更早的 Python 依赖管理的方式不说,视频中提到了

手工下载包,然后 python requests-threads-0.1.1/setup.py install 的安装方式 easy_install requests-threads 自动从网络上下载并安装到本地,它却未提供卸载的命令 easy_install 的替代品 pip 出现了,可 pip install requests 或 pip uninstall requests 。Python3 的相应的命令是 pip3 。 virtualenv 或 python3 -m venv , 虚拟环境的出现,每个项目自我管理依赖,营造相互隔离的应用环境 新一代的 pipevn ,依赖描述文件是 Pipfile , 并支持锁定文件,区分开发与产品环境

下面体验一下 pip (将以 pip3 为例), venv 和 virtualenv , 以及 pyvenv 的应用。系统环境是 Ubuntu 18.04 + Python 3.6.7,当前用户是 vagrant 。

1. pip3 依赖管理

首先 pip3 没有的话需要通过下面的命令进行安装

sudo apt-get install python3-pip

pip 安装的模块可以是全局的或用户独立的,回忆一下 Python 的模块搜索路径 ,安装后模块总是要能被 Python 程序搜索到才有用,Python 搜索模块的路径是依照 sys.path 的列表值顺序。我们用 python3 -c "import sys; print(str(sys.path).replace(',', '\n'))" 查看 Python3 交互界面下的路径列表:

['' '/usr/lib/python36.zip' '/usr/lib/python3.6' '/usr/lib/python3.6/lib-dynload' '/home/vagrant/.local/lib/python3.6/site-packages' '/usr/local/lib/python3.6/dist-packages' '/usr/lib/python3/dist-packages']

重来没有安装过用户独立的模块的话,第五行可能看不到,说下区别

sudo pip3 install requests

使用了 sudo , 但没有带 --user 参数情况下 pip 安装模块到全局路径中,即 requests 及其依赖将被安装到 /usr/local/lib/python3.6/dist-packages 目录中,对任何用户可见。

pip3 install requests

或 pip3 install requests --user

或 sudo pip3 install requests --user

未用 sudo 或指定了 --user 参数,模块 requests 及其依赖将被安装到当前用户目录 /home/vagrant/.local/lib/python3.6/site-packages 中,对其他用户不可见。

相的模块先安装到全局目录 /usr/local/lib/python3.6/dist-packages 中,然而再次安装到用户目录 /home/vagrant/.local/lib/python3.6/site-packages , 反过来就不允许。

在没有虚拟环境下使用 pip 时,无论模块是安装到全局或用户目录中,都有以下弊端

不同的 Python 项目基本无法使用同一模块的不同版本 容易产生许多垃圾模块,曾经下载的模块不知道是否有谁仍在使用 不能简单的用 pip3 freeze 来生成 requrements.txt 文件,它将包含一大堆的内容

所以当维护一个项目时,最好在 Python 虚拟环境中使用 pip , 我们将要使用到 python3 -m venv 或 virtualenv

接下来会学习 Python 虚拟环境的应用

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

代码区博客精选文章
分页:12
转载请注明
本文标题:Python 包管理及虚拟环境的应用(一)
本站链接:https://www.codesec.net/view/628192.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(75)