python虚拟环境简介
更多有关python虚拟环境的应用请参考https://www.jianshu.com/p/8bd364108cbd
虚拟环境的必要性
Linux环境中的应用
Windows环境中的应用
虚拟环境的创建
假如创建了一个专门存放python虚拟环境的目录PythonENV
- 在Windows终端,切换到PythonENV目录,输入
python -m venv SimpleScripts
- 切换到目录
C:\Users\andya\Desktop\PythonENV\SimpleScripts\Scripts\
,执行activate
或者activate.bat
,激活虚拟环境 - 在虚拟环境中的任意目录都可执行
deactivate
命令来退出当前虚拟环境
注:
python
虚拟环境venv
和conda
一样有两种激活方式:cmd terminal
和powershell
。其中cmd terminal
是以.bat
结尾的可执行文件activate.bat
,而powershell
是以.ps1
结尾的可执行文件Activate.ps1
。在
Scripts/
文件夹下,bat文件在cmd terminal
通过call
调用,ps1
文件在powershell
通过.
调用执行
路径下还有一个无后缀的文件activate
,这是在Linux
下执行的文件。
可能遇到的问题
Windows系统中,则是通过.\venv\Scripts\activate
命令进入虚拟环境,因为运行了 activate.bat
后会在同级目录下生成 activate.ps1
,PowerShell 默认不允许执行 *.ps1
脚本文件。运行 ps1
文件会得到下面的错误:
PS D:\venv> .\flask2.2\Scripts\activate
.\django\Scripts\activate : 无法加载文件 D:\venv\flask2.2\Scripts\activate.ps1,因为在此系统上禁止运行脚本。有关
详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ .\django\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
所以要解决这个问题,需要在powershell里面修改policy:
使用管理员打开powershell
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\Windows\system32> Set-ExecutionPolicy RemoteSigned
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”): Y
PS C:\Windows\system32>
# Policy的有效参数:
# -- Restricted: 不载入任何配置文件,不运行任何脚本。 "Restricted" 是默认的。
# -- AllSigned: 只有被Trusted publisher签名的脚本或者配置文件才能使用,包括你自己再本地写的脚本。
# -- RemoteSigned: 对于从Internet上下载的脚本或者配置文件,只有被Trusted,publisher签名的才能使用。
# -- Unrestricted: 可以载入所有配置文件,可以运行所有脚本文件. 如果你运行一个从internet下载并且没有签名的脚本,在运行之前,你会被提示需要一定的权限。
# -- Bypass: 所有东西都可以使用,并且没有提示和警告。
# -- Undefined: 删除当前scope被赋予的ExecutionPolicy,但是Group Policy scope的Execution Policy不会被删除。
pip
pip常用的命令
-
升级包:
pip install -U PackageName
-
显示包所在的目录:
pip show -f PackageName
-
搜索包:
pip search <搜索关键字>
-
查询可升级的包:
pip list -o
-
下载包而不安装:
pip install PackageName -d <目录> 或 pip install -d <目录> -r requirements.txt
-
导出当前python环境中的所有包名:
pip freeze > requestment.txt
-
安装requestment.txt中的所有包:
pip install -r requestment.txt
-
卸载requestment.txt中的所有包:
pip uninstall -r requestment.txt
pip install PackageName
或者python3 -m pip install PackageName
,此方法默认安装package的最新版本
pip install PackageName==2.1.0
或者python3 -m pip install PackageName==3.4
,安装对应的package版本
以上安装package的方法,package的下载速度可能会很慢,可以使用国内的镜像源去提高下载速度。
推荐三个镜像源:
- 清华源:
https://pypi.tuna.tsinghua.edu.cn/simple
- 阿里云镜像源:
https://mirrors.aliyun.com/pypi/simple
- 中国科学技术大学:
http://pypi.mirrors.ustc.edu.cn/simple/
使用方法:
pip install PackageName -i https://pypi.tuna.tsinghua.edu.cn/simple
windows下pip安装包可能会存在的问题
出现警告或者没有权限等问题
倘若出现此问题,可在虚拟环境中的Scripts
目录下使用命令python.exe -m pip install PackageName
。倘若没有得到解决,自己再想办法吧,哈哈哈
pip安装包从虚拟环境中同步到真实环境中
本人小白阶段遇到的问题,哈哈哈😂
假如在虚拟环境中使用pip安装相关包,安装成功,且通过pip list
也可看到所安装的包,但是退出虚拟环境后,执行pip list
仍发现有我们在虚拟环境中安装的相关包。莫要着急,不是你的操作有误,而是因为在退出虚拟环境后,你是在虚拟环境的Scripts
目录中运行的pip
指令,因为该目录下存在虚拟环境的pip和python应用程序,在此目录下运行的pip
指令,固然就相当于在虚拟环境中运行pip
指令。(解释的很不专业,凑合听,不过应该很好理解)