Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python虚拟环境是否避免了冗余安装?_Python - Fatal编程技术网

python虚拟环境是否避免了冗余安装?

python虚拟环境是否避免了冗余安装?,python,Python,我对python相当陌生,并且开始使用python虚拟环境。创建虚拟环境时,我必须重新安装当前项目所需的所有模块。 我想知道,如果同一版本的模块已经安装在另一个项目中或系统范围内,虚拟环境是否会以某种方式避免模块安装中的冗余 另外,在系统范围内安装模块而不仅仅是在虚拟环境中安装模块是否有意义,因为我无论如何都需要在虚拟环境中安装模块?虚拟环境为应用程序隔离模块。这意味着升级一个应用程序中的模块不会影响另一个应用程序。由于模块偶尔会发生中断性更改,这一点很重要 您是否使用requirements.

我对python相当陌生,并且开始使用python虚拟环境。创建虚拟环境时,我必须重新安装当前项目所需的所有模块。 我想知道,如果同一版本的模块已经安装在另一个项目中或系统范围内,虚拟环境是否会以某种方式避免模块安装中的冗余


另外,在系统范围内安装模块而不仅仅是在虚拟环境中安装模块是否有意义,因为我无论如何都需要在虚拟环境中安装模块?

虚拟环境为应用程序隔离模块。这意味着升级一个应用程序中的模块不会影响另一个应用程序。由于模块偶尔会发生中断性更改,这一点很重要


您是否使用requirements.txt文件来帮助管理依赖关系?当您需要重置虚拟环境时,可以更轻松地安装它们。

简短回答:

如果使用虚拟环境,则需要安装项目所需的每个依赖项(包),即使之前已在另一个虚拟环境中安装了此包

这正是虚拟环境的目的:每个项目都有自己的依赖关系。这使您能够在不影响其他项目的情况下,清楚地管理每个项目的依赖关系

当然您可以通过执行以下操作在全局范围内安装dependecy(软件包)

pip安装

但在执行此操作之前,请确保不要激活任何虚拟环境。这将在python的根安装处安装包,python是主要环境

但是强烈建议不要这样做,使用虚拟环境始终是一种很好的做法

附加服务:

除此之外,您还可以使用以下命令:

pip freeze > requirements.txt
这将在项目的根文件夹中创建文件调用
requirements.txt

此文件如下所示:

numpy==1.18.1
pandas==0.25.3
在本例中,我在虚拟环境中安装了软件包
numpy
version 1.18.1和0.25.3版本的软件包
pandas

这样,如果另一个项目需要更新或旧版本的包numpy,我可以直接在它的
requirements.txt
中管理它,而不会影响其他项目

此文件还将帮助您快速、轻松地重新安装环境的依赖项(例如,如果您希望创建与当前项目具有相同启动依赖项的另一个项目),只需执行以下操作:

pip install -r requirements.txt
当然:确保首先将此requirements.txt文件复制到新项目的目标根文件夹中,然后激活其虚拟环境

命令中的快速摘要:

1) 安装虚拟环境(Linux):

安装虚拟环境(Windows):

2) 创建新的虚拟环境(linux和Windows):

在执行此操作之前,请确保对根项目文件夹执行
cd
。这将创建一个名为“venv”的新文件夹(或在virtualenv命令后面加上的任何名称,但venv是一种惯例和良好的做法)。如果您不在根文件夹中,并且出于任何原因您不想这样做,则始终可以在此命令中添加一个
-p
标志,以便精确地确定您要安装虚拟环境的路径,如下所示:

virtualenv -p /YOUR_PROJECT_PATH/ venv
3) 激活虚拟环境(Linux):

如果您对虚拟环境的调用与venv不同,请确保用您所调用的内容替换venv

激活虚拟环境(Windows):

在此之后,应出现以下提示:

Linux:

(venv) $ 
窗口:

C:\> YOUR_PROJECT_PATH\venv\Scripts\activate.bat
(venv) C:\>
4) 安装软件包:

Linux
(venv)$pip3安装

Windows
(venv)C:\>pip安装

此命令将仅在venv site packages文件夹中安装
,并且此依赖项仅适用于此虚拟环境

5) 冻结依赖项:

Linux
(venv)$pip freeze>requirements.txt

Windows
(venv)C:\>pip冻结>要求.txt

如上所述,这将在您的项目根文件夹中创建
requirements.txt
(它将包含您在此虚拟环境中安装的所有软件包名称及其版本的列表)

6) 停用您的虚拟环境:

deactivate
如果通过执行上述步骤创建新环境,并且希望此新环境与第一个环境具有相同的依赖关系:

cp YOUR_FIRST_PROJECT_PATH\requirements.txt YOUR_NEW_PROJECT_PATH
cd YOUR_NEW_PROJECT_PATH
在此处创建并激活新的虚拟环境(如上所述),然后:

7) 全局安装软件包(不推荐): 如果您首先激活了当前的venv:

deactivate 
然后:

pip install <package_name>
pip安装
这将在python的根安装中安装包_名称

为了进一步理解本课程:


不,不是这样,但这是拥有虚拟环境的要点,因为库依赖于另一个环境,因此在一个环境中升级或修改库不会影响其他环境。

虚拟环境是半隔离的Python环境(自包含目录)这允许安装包供特定应用程序使用,而不是在系统范围内安装

主要的优点是,它使用户能够为每个python项目/环境安装不同的库、依赖项,甚至可以安装不同的python解释器


请看这里:它将更全面地解释

而不是相反!每个virtualenv将安装所有模块,并且不会与其他virtualenv共享。但是,这正是virtualenv的重点——不
deactivate
cp YOUR_FIRST_PROJECT_PATH\requirements.txt YOUR_NEW_PROJECT_PATH
cd YOUR_NEW_PROJECT_PATH
pip install requirements.txt
deactivate 
pip install <package_name>