社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

michael.zech • 5 年前 • 1393 次点击  

来自javascript,我熟悉NPM。

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

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

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

我就在那里?

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

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

巨蟒没有 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    5 年前

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

对的。

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

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

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