<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>依赖管理 &#8211; 李辉 / Grey Li</title>
	<atom:link href="https://greyli.com/tag/%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://greyli.com</link>
	<description>一个编程和写作爱好者的在线记事本</description>
	<lastBuildDate>Thu, 06 Nov 2025 11:36:11 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.26</generator>

<image>
	<url>https://greyli.com/wp-content/uploads/2025/03/avatar-500-compressed-144x144.jpg</url>
	<title>依赖管理 &#8211; 李辉 / Grey Li</title>
	<link>https://greyli.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>要不我们还是用回 virtualenv/venv 和 pip 吧</title>
		<link>https://greyli.com/back-to-virtualenv-venv-and-pip/</link>
		<comments>https://greyli.com/back-to-virtualenv-venv-and-pip/#comments</comments>
		<pubDate>Sat, 07 Sep 2019 06:11:35 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[pip]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[venv]]></category>
		<category><![CDATA[virtualenv]]></category>
		<category><![CDATA[依赖管理]]></category>
		<category><![CDATA[虚拟环境管理工具]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=2551</guid>
		<description><![CDATA[这篇文章没什么新东西，只是介绍古老又靠谱的 Python 虚拟环境和依赖管理方式：virtualenv/ven [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>这篇文章没什么新东西，只是介绍古老又靠谱的 Python 虚拟环境和依赖管理方式：virtualenv/venv+pip。一来方便被我在《Flask 入门教程》和《Flask Web 开发实战》带入 <a href="http://greyli.com/do-not-use-pipenv/">Pipenv 坑</a>的初学者了解基础工具的用法，二来方便其他 Python 初学者参考，自己顺便做个总结。<span data-offset-key="2c438-0-0">如果你想了解更多详细内容，Python 官方教程</span><a class="Link ztext-link" href="https://docs.python.org/3/tutorial/venv.html" target="_blank" rel="noopener" data-offset-key="2c438-1-0" data-editable="true"><span data-offset-key="2c438-1-0">这一章</span></a><span data-offset-key="2c438-2-0">写的更好，可以替代这篇文章。</span></p>
<p>既然大部分试图简化 Python 虚拟环境和依赖管理工作流程的新工具都不够稳定，继续使用 virtualenv/venv 和 pip 这样的底层工具也是一个不错的选择，而且大多数人也是这么做的。它们虽然用起来有一点麻烦，但至少更可靠。</p>
<h2>基本概念</h2>
<p>下面是一些基本概念：</p>
<ul>
<li><a href="https://www.pypa.io/en/latest/">PyPA</a>：指 Python Packaging Authority，一个维护 Python 打包相关项目的小组，相关项目具体见 <a href="https://github.com/pypa">https://github.com/pypa</a>。</li>
<li><a href="https://pip.pypa.io/en/stable/">pip</a>：Python 包安装器 。</li>
<li><a href="https://virtualenv.pypa.io/en/stable/">virtualenv</a>：Python 虚拟环境管理工具。</li>
<li><a href="https://docs.python.org/3/library/venv.html">venv</a>：Python 标准库内置的虚拟环境管理工具，Python 3.3 加入，Python 3.5 开始作为管理虚拟环境的推荐工具，用法类似 virtualenv。如果你使用 Python 3，推荐使用 venv 来替代 virtualenv。</li>
</ul>
<h2>使用 virtualenv/venv 管理虚拟环境</h2>
<h3>venv 模块</h3>
<p>如果你使用 Python 3（具体说是 Python 3.3 及以上版本），推荐使用标准库内置的 <a href="https://docs.python.org/3/library/venv.html">venv 模块</a>替代 virtualenv，两者的使用方式基本相同，唯一不同的是创建虚拟环境的方式。</p>
<p>如果你使用 Python 2，那就只能选择 virtualenv，你需要额外安装它。我先假设你已经安装了 pip，因为在 Python 2 &gt;=2.7.9 或 Python 3 &gt;=3.4 这些版本的 Python 会一并安装 pip，其他版本可以参考文档的<a href="https://pip.pypa.io/en/stable/installing/">安装部分</a>。在 Windows 下使用下面的命令安装 virtualenv：</p>
<pre class="">$ pip install virtualenv</pre>
<p>其他操作系统可以使用下面的命令安装：</p>
<pre class="">$ sudo pip install virtualenv</pre>
<p>尽管<a href="https://pages.charlesreid1.com/dont-sudo-pip/">不推荐使用 sudo pip</a> 的方式安装 Python 包，但这仍然是最简单和统一的方式。更安全的方式是使用系统包管理器来安装，或是使用 pip &#8211;user 方式安装。</p>
<h3>创建虚拟环境</h3>
<p>假设我们的项目名叫 snow，创建对应的文件夹然后切换到根目录：</p>
<pre class="">$ mkdir snow
$ cd snow</pre>
<p>如果使用 venv，那么使用下面的命令创建虚拟环境，其中 snow-venv 是虚拟环境的名字，也作为创建的虚拟环境文件夹名称，你可以自由修改（通常会使用 venv 或 env 作为虚拟环境名）：</p>
<pre class="">$ python -m venv snow-venv</pre>
<p>如果使用 virtualenv，则使用下面的命令：</p>
<pre class="">$ virtualenv snow-venv</pre>
<p>这会在当前目录创建名为 snow-venv 的虚拟环境文件夹，你需要把这个文件夹名称加入 .gitignore 文件以便让 Git 忽略。</p>
<h3>激活虚拟环境</h3>
<p>通过执行对应的激活脚本来激活虚拟环境，不同操作系统的激活命令（激活脚本及路径）有一点不同。Windows（CMD.exe）使用下面的命令激活：</p>
<pre class="">$ snow-venv\scripts\activate</pre>
<p>Linux 和 macOS（bash/zsh）使用下面的命令：</p>
<pre class="">$ source snow-venv/bin/activate</pre>
<p>或：</p>
<pre class="">$ . snow-venv/bin/activate</pre>
<p>类似的，其他终端程序可以执行对应的激活脚本来激活虚拟环境。</p>
<p>激活虚拟环境以后，命令行提示符前会显示当前虚拟环境的名字：</p>
<pre class="">(snow-venv) $</pre>
<p>使用 deactivate 命令可以退出虚拟环境。</p>
<h2>使用 pip 管理依赖</h2>
<p>简单列一下基本用法，虽然大部分人都很熟悉了……以 Flask 为例，首先是安装依赖：</p>
<pre class="">(snow-venv) $ pip install flask</pre>
<p>更新依赖：</p>
<pre class="">(snow-venv) $ pip install --upgrade flask</pre>
<p>或是：</p>
<pre class="">(snow-venv) $ pip install -U flask</pre>
<p>卸载依赖：</p>
<pre class="">(snow-venv) $ pip uninstall flask</pre>
<p>除此之外，还有 pip show flask 命令可以查看某个依赖的详细信息，pip list 列出所有依赖。</p>
<p>下面的命令可以手动生成依赖列表：</p>
<pre class="">(snow-venv) $ pip freeze &gt; requirements.txt</pre>
<p>如果你需要手动开发依赖和生产依赖，可以手动把开发相关的依赖放到单独的文件，比如 requirements-dev.txt。</p>
<p>当你需要在新的机器创建程序运行环境时，（创建虚拟环境后）只需要使用下面的命令从依赖文件安装所有依赖：</p>
<pre class="">(snow-venv) $ pip install -r requirements.txt</pre>
<p>如果安装包的时候速度太慢，可以考虑设置 PyPI 国内镜像，具体参考<a href="http://greyli.com/set-custom-pypi-mirror-url-for-pip-pipenv-poetry-and-flit/">这篇文章</a>。</p>
<h2>从其他工具迁移回来</h2>
<p>如果你想从 Pipenv 迁移回来，方法很简单，只需要生成一个 requirements.txt 文件即可。使用下面的命令生成一般依赖列表：</p>
<pre class="">$ pipenv lock -r</pre>
<p>使用下面的命令输出开发依赖列表：</p>
<pre class="">$ pipenv lock -r --dev</pre>
<p>然后手动把两个命令的输出保存为 requirements.txt 和 requirements-dev.txt。</p>
<p><span data-offset-key="571ch-0-0">从 Poetry、Conda 等其他工具迁移回来可以使用 </span><a class="Link ztext-link" href="https://github.com/bndr/pipreqs" target="_blank" rel="noopener" data-offset-key="571ch-1-0" data-editable="true"><span data-offset-key="571ch-1-0">pipreqs</span></a><span data-offset-key="571ch-2-0"> 来生成 requirements.txt，它会基于项目代码的导入语句来生成依赖列表。</span></p>
<p>在下一篇文章，我会介绍一些辅助工具来搭配 virtualenv/venv+pip 使用，让虚拟环境和依赖管理更方便，比如 virtualenvwrapper、pip-tools 等。</p>
<p>（4）</p>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/back-to-virtualenv-venv-and-pip/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>
