我是python的新手,并且开始使用python虚拟环境。创建虚拟环境时,必须重新安装正在处理的当前项目所需的所有模块。 我想知道,如果同一版本的模块已经安装在另一个项目中或在系统级范围内,虚拟环境是否会以某种方式避免重复安装模块?
此外,因为我仍然需要在虚拟环境中安装模块,所以在系统级而不是仅在虚拟环境中安装模块是否有意义?
答案 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。
当然,进一步了解:
答案 1 :(得分:0)
虚拟环境隔离应用程序的模块。这意味着升级一个应用程序中的模块不会影响另一应用程序。由于模块偶尔会有重大更改,因此这很重要。
您是否正在使用requirements.txt文件来帮助管理依赖项?当您需要重置虚拟环境时,它使安装它们更加容易。
答案 2 :(得分:0)
不是,但这不是拥有虚拟环境的要点,因为库依赖于另一个环境,因此在一个环境中升级或修改库不会影响其他环境。
答案 3 :(得分:0)
虚拟环境是半隔离的Python环境(独立目录),它允许安装软件包以供特定应用程序使用,而不是在系统范围内安装。
主要优点在于,它使用户能够为每个python项目/环境安装不同的库,依赖项以及为什么不安装,甚至安装不同的Python解释器。
请在此处查看:https://docs.python-guide.org/dev/virtualenvs/它会更详细地说明