python虚拟环境是否可以避免重复安装?

时间:2020-05-02 18:44:23

标签: python

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

此外,因为我仍然需要在虚拟环境中安装模块,所以在系统级而不是仅在虚拟环境中安装模块是否有意义?

4 个答案:

答案 0 :(得分:6)

简短答案:

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

这正是虚拟环境的目的:每个项目都有自己的依赖性。这样,您就可以清楚地管理每个项目的依赖关系,而不会影响其他项目。

当然您可以通过全局安装Dependecy(一个软件包)

pip install <Package name>

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

但是强烈建议您不要这样做,在虚拟环境中工作始终是一个好习惯。

其他:

现在,除了此答案外,您还可以使用命令:

pip freeze > requirements.txt

这将在项目的根文件夹中创建一个文件调用requirements.txt

此文件如下所示:

numpy==1.18.1
pandas==0.25.3

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

这样,如果另一个项目需要 new old 版本的numpy软件包,则我可以直接在其requirements.txt中进行管理,而不会影响其他版本项目。

通过执行以下操作,该文件还将帮助您快速轻松地重新安装对环境的依赖关系(例如,如果您要创建与当前项目具有相同的开始依赖关系的另一个项目)。

pip install -r requirements.txt

当然:在执行此操作之前,请确保首先将这个requirements.txt文件复制到目标的新项目的根文件夹中,并激活其虚拟环境。

命令摘要:

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

pip3 install virtualenv 

安装虚拟环境(Windows):

pip install virtualenv

2)创建一个新的虚拟环境(Linux和Windows):

 virtualenv  venv 

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

virtualenv -p /YOUR_PROJECT_PATH/ venv

3)激活虚拟环境(Linux):

$ source  YOUR_PROJECT_PATH/venv/bin/activate

如果您对虚拟环境的调用方式与venv不同,请确保使用您所调用的方式替换venv。

激活虚拟环境(Windows):

C:\> YOUR_PROJECT_PATH\venv\Scripts\activate.bat

在此之后,您将得到以下提示:

Linux:

(venv) $ 

Windows:

(venv) C:\>

4)安装软件包:

Linux (venv) $ pip3 install <package_name>

Windows (venv) C:\> pip install <package_name>

此命令仅将<package_name>安装在venv site-packages文件夹中,并且此依赖项仅可用于该虚拟环境。

5)冻结您的依赖项:

Linux (venv) $ pip freeze > requirements.txt

Windows (venv) C:\> pip freeze > requirements.txt

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

6)停用您的虚拟环境:

deactivate

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

cp YOUR_FIRST_PROJECT_PATH\requirements.txt YOUR_NEW_PROJECT_PATH
cd YOUR_NEW_PROJECT_PATH

在此创建并激活新的虚拟环境(如上所述),然后:

pip install requirements.txt

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

deactivate 

然后:

pip install <package_name>

这将在python的根目录安装package_name。

当然,进一步了解:

https://docs.python.org/3/library/venv.html

答案 1 :(得分:0)

虚拟环境隔离应用程序的模块。这意味着升级一个应用程序中的模块不会影响另一应用程序。由于模块偶尔会有重大更改,因此这很重要。

您是否正在使用requirements.txt文件来帮助管理依赖项?当您需要重置虚拟环境时,它使安装它们更加容易。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

虚拟环境是半隔离的Python环境(独立目录),它允许安装软件包以供特定应用程序使用,而不是在系统范围内安装。

主要优点在于,它使用户能够为每个python项目/环境安装不同的库,依赖项以及为什么不安装,甚至安装不同的Python解释器。

请在此处查看:https://docs.python-guide.org/dev/virtualenvs/它会更详细地说明