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

mil*_*nov 11 python

我对 python 还很陌生,我开始使用 python 虚拟环境。当我创建一个虚拟环境时,我必须重新安装我正在处理的当前项目所需的所有模块。我想知道如果相同版本的模块已经安装在另一个项目或系统级别上,虚拟环境是否以某种方式避免了模块安装的冗余?

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

jos*_*faz 9

简答:

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

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

当然,您可以通过执行以下操作来全局安装依赖项(包)

pip install <Package name>

但在此之前一定不要激活任何虚拟环境。这将在 python 的 root 安装中安装包,这是主要环境。

强烈不建议这样做,使用虚拟环境始终是一个好习惯。

附加:

现在除了这个答案,您还可以使用以下命令:

pip freeze > requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

该文件如下所示:

numpy==1.18.1
pandas==0.25.3
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我在我的虚拟环境中安装了包numpy版本 1.18.1 和pandas版本 0.25.3的包

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

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

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

命令中的快速摘要:

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

pip3 install virtualenv 
Run Code Online (Sandbox Code Playgroud)

安装虚拟环境(Windows):

pip install virtualenv
Run Code Online (Sandbox Code Playgroud)

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

 virtualenv  venv 
Run Code Online (Sandbox Code Playgroud)

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

virtualenv -p /YOUR_PROJECT_PATH/ venv
Run Code Online (Sandbox Code Playgroud)

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

$ source  YOUR_PROJECT_PATH/venv/bin/activate
Run Code Online (Sandbox Code Playgroud)

如果您对虚拟环境的称呼与 venv 不同,请务必将 venv 替换为您所称呼的任何内容。

激活虚拟环境(Windows):

C:\> YOUR_PROJECT_PATH\venv\Scripts\activate.bat
Run Code Online (Sandbox Code Playgroud)

在此之后你应该有这个提示:

Linux:

(venv) $ 
Run Code Online (Sandbox Code Playgroud)

窗户:

(venv) C:\>
Run Code Online (Sandbox Code Playgroud)

4)安装包:

Linux (venv) $ pip3 install <package_name>

视窗 (venv) C:\> pip install <package_name>

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

5)冻结您的依赖项:

Linux (venv) $ pip freeze > requirements.txt

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

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

6)停用您的虚拟环境:

deactivate
Run Code Online (Sandbox Code Playgroud)

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

cp YOUR_FIRST_PROJECT_PATH\requirements.txt YOUR_NEW_PROJECT_PATH
cd YOUR_NEW_PROJECT_PATH
Run Code Online (Sandbox Code Playgroud)

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

pip install requirements.txt
Run Code Online (Sandbox Code Playgroud)

7) 全局安装一个包(不推荐):如果你有一个当前激活的 venv 首先:

deactivate 
Run Code Online (Sandbox Code Playgroud)

然后 :

pip install <package_name>
Run Code Online (Sandbox Code Playgroud)

这将在 python 的 root 安装中安装 package_name。

当然,为了进一步理解:

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