Py学习  »  Python

在理解为什么python需要虚拟环境的原因时挣扎

michael.zech • 4 年前 • 682 次点击  

来自javascript,我熟悉NPM。

在那里,您可以全局(通过使用-g标志)或本地在项目中安装包。 在Python中,它们有这些虚拟环境。 我还是有点不确定为什么需要它们。我知道这是因为在一台机器上有不同版本的相同包。

是因为python没有本地项目安装的概念吗?

所有的软件包安装都是全局安装的,这是不可能的。在我看来是这样的… 所以他们有虚拟环境吗?

我就在那里?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38152
 
682 次点击  
文章 [ 2 ]  |  最新文章 4 年前
geckos
Reply   •   1 楼
geckos    4 年前

虚拟环境使您能够按项目封装依赖项。

巨蟒没有 node_modules 等效。当你用 pip 它转到您的 站点包 文件夹。要查找此文件夹,可以运行 python -m site 它将打印出它将在其中搜索包的文件夹。

Fedora 29示例:

➜  ~ python -m site
sys.path = [
    '/home/geckos',
    '/usr/lib/python27.zip',
    '/usr/lib64/python2.7',
    '/usr/lib64/python2.7/plat-linux2',
    '/usr/lib64/python2.7/lib-tk',
    '/usr/lib64/python2.7/lib-old',
    '/usr/lib64/python2.7/lib-dynload',
    '/usr/lib64/python2.7/site-packages',
    '/usr/lib/python2.7/site-packages',
]
USER_BASE: '/home/geckos/.local' (exists)
USER_SITE: '/home/geckos/.local/lib/python2.7/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

PIP与包管理器

如果不使用虚拟环境,则可能最终会与操作系统python软件包并排安装软件包,这就是危险所在。包可能被覆盖,事情会很快变得混乱。例如,使用pip安装flask,然后尝试使用package manager安装jinja2,现在移除jinja2并断开flask,或者更新系统,jinja2得到更新,但flask没有更新。或者更简单地说,使用包管理器安装一些东西,然后使用pip删除,知道包管理器处于中断状态。

因此,我们总是使用虚拟环境,甚至按项目分离虚拟环境。

创建和维护虚拟环境

没有什么能阻止您将虚拟环境维护在与项目相同的文件夹中。这样你也会有同样的 伐木 你拥有的节点模块。你可以用

virtualenv <SOME_FOLDER> 对于python 2 或 python3 -m venv <SOME_FOLDER> 对于python 3

我见过的惯例

如果您将虚拟环境保留为项目的子文件夹,我通常会调用 env venv

其他的选择是把所有的东西都放在你家里的同一个文件夹里,我一直在用 ~/.venv/<PROJECT>

皮彭夫

最后还有一个选择,我更喜欢纯的 匹普 . pipenv是一个为您自动管理虚拟环境的工具。感觉更接近 纱线 有更多的特点

为项目创建虚拟环境 pipenv --tree pipenv --two 在项目文件夹中。它将创建和管理虚拟环境,并将依赖项写入pipenv文件。它还支持开发包,我真的认为值得尝试。这是文件: https://docs.pipenv.org/en/latest/

我希望这有帮助,问候

Josh Karpel
Reply   •   2 楼
Josh Karpel    4 年前

是因为python没有本地项目安装的概念吗?

对的。

嗯,基本上是正确的。有许多“现代”的python包管理器支持项目本地包安装。现在两个大的是 pipenv poetry .

但是,所有这些库都是基本的Python虚拟环境机制的包装器。它是生态系统的基础。

在python中,全局包管理有点棘手,因为unix系统往往带有一个支持部分操作系统的“system python”安装。在系统python中安装/更新包是 非常坏的主意 因此,您总是希望在自己安装的Python中工作,要么是完全独立的安装,要么至少是系统Python的虚拟环境。