python虚拟环境virtualenv、virtualenv下运行IDLE、powershell 运行脚本由执行策略引起的问题

一、为什么要创建虚拟环境:

  应为在开发中会有同时对一个包不同版本的需求,创建多个开发环境就能解决这个问题。或许也会有对python不同版本的需求,这就需要使用程序来管理不同的版本,virtualenv与virtualenvwrapper就好比能创造出来一个一个的独立容器,各个容器之间互不干扰,所以我们就可以在每个容器中安装我们需要的依赖包

  虚拟环境是Python解释器的一个私有的副本,在这个环境中你可以安装私有包,而且不会影响系统中安装的全局Python解释器。虚拟环境非常的有用,可以在系统中Python解释器中避免包的混乱和版本的冲突。为每个程序单独创建虚拟环境可以保证程序只能访问虚拟环境中的包,从而保持全局解释器的干净简洁,使其只作为(更多)虚拟环境的源。

二、virtualenv 与 virtualenvwrapper-win

  virtualenvwrapper-win可以看做是对virtualenv的优化,前者可以让你省去操心虚拟环境存放在不同的文件夹下带来的管理问题,注意必须在virtualenv安装成功的基础上安装

安装virtualenv 

$ pip install virtualenv 

  等待一会出现successfully...就说明成功了

virtualenv使用步骤命令

#先使用cd命令进入到你要虚拟环境存放的目录  cd操作方法见:https://www.cnblogs.com/Gaoqiking/p/10528079.html
$ cd C:UsersAdministrator.SC-22AppDataLocalProgramsPythonPython37virtual_environment
$ virtualenv envname #创建一个虚拟环境,envname为环境名,也是创建的文件夹名
#然后你需要进入上名新创建的文件夹下的scripts文件夹
$ cd envaname/scripts #也可以以绝对目录进去
$ cd  cd C:UsersAdministrator.SC-22AppDataLocalProgramsPythonPython37virtual_environmentenvaname/scripts    #这是绝对目录,下次你可以直接这样进入
$ activate #激活 实际上是执行scripts里面的activate.bat

  当成功激活后会显示虚拟环境名(powershell有些麻烦我认为),你不用关注我为什么后面有一个 (拉姆他符号)

在虚拟环境中使用IDLE

  当我们创建了虚拟环境后,若是正常打开IDLE,是无法访问虚拟环境里面的包的,需要在命令行里输入

$ python -m idlelib.idle  #注意,需要当前的虚拟空间已经激活

  -m是将库中的模块当做脚本去运行

  我们还可以只在IDLE里编辑,然后运行的时候不按F5而是用命令行运行程序

(envs)C:UsersAdministrator.SC-> python ./envs/web_go/server.py #注意路径

  

virtualenv关闭虚拟环境

$ deactivate

—system-site-packages 参数

  使用这个参数创建的隔离环境能让你直接引用 /usr/lib/python2.7/site-packages (即本机全局site-package目录)中的依赖包,只在拥有全局site-packages目录的读写权限,并且你的应用要依赖其中的模块的情况下,该参数会很有用。其他情况下没必要使用该参数

virtualenv --system-site-packages -p python3 ./venv #-p为指定解释器所用的版本

  

  至此,我们就成功创建了一个虚拟环境,里面只有一些必须的头文件,我们就可以安装我们需要的依赖包了不过如果想让使用体验更完美,我们还可以选择virtualenvwrapper-win

安装virtualenvwrapper-win(注意不是virtualenvwrapper)

$ pip install virtualenvwrapper-win

创建虚拟环境

  完成后会自动进入,且不需要像virtualenv一样先指定文件夹(如果不指定会存在当前目录下),这个可以直接运行命令,虚拟环境会被存放在一个固定的文件夹(见下图框选)

$ mkvirtualenv envname

  

  

配置

  假如你想改变存放的文件夹,你要配置系统环境变量(注意是新建系统变量)

  

通过设置系统变量“WORKON_HOME”,我们就为virtualenvwrapper-win创建的虚拟环境重新制定了存放目录,你可以将原有的文件拷贝过去

使用workon 命令进入虚拟环境

  

$ workon  envname     # 进入虚拟环境名为envname

$workon     #会显示所有的虚拟环境

退出  

$ deactivate

三、更多信息与参考经验

  virtualenv中文文档:https://www.bookstack.cn/read/virtualenv-zh/date-2018.08.27.08.08.23

  https://blog.csdn.net/godot06/article/details/81079064

    https://www.cnblogs.com/cwp-bg/p/python.html

四、遇到问题  

  问题:Suggestion [3,General]: 找不到命令 activate,但它确实存在于当前位置。默认情况下,Windows PowerShell 不会从当前位置加载命令。如果信任此命令,请改为键入“.activate”。有关详细信息,请参阅 "get-help about_Command_Precedence"。

  解决办法:按照提示“改为键入.activate”后又出现另外错误:

  问题:.activate : 无法加载文件 C:UsersAdministrator.SC-2002132AppDataLocalProgramsPythonPython37virtual_environment.virtualenvsenvnamescriptsactivate.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。

  解决办法:认真阅读提示,进入提示网站,发现是执行策略问题,有几个解决办法

  一是可以执行 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser   RemoteSigned是执行策略, CurrentUser是策略作用域,,这些都可以在网站上找到解释

  二是可以直接复制脚本内容进去执行

  三是可以选用cmd来运行

  四是气运丹田,大喊一声“妈”,或者关机解决

原文地址:https://www.cnblogs.com/Gaoqiking/p/10528509.html