一. 不同用户下配置virtualenvwrapper的问题

问题描述:

安装virtualnev和virtualnevwrapper之后,在.bashrc进行virtualenvwrapper的相关配置后重新加载.bashrc文件时报错.

报错内容大致如下:

/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly

也就是说系统检测当前pip下的安装软件中查找不到virtualenv和virtualenvwrapper.

之所以会出现这样的问题有可能是以下几条原因:

  1. 在安装虚拟环境时, 可能是在使用普通用户下加了sudo命令进行安装了virtualenv和virtualenvwrapper.
    使用命令   pip list   进行查看,是否安装成功, 如果使用了pip3 进行安装虚拟环境要使用 pip3 list进行查看.

    如果当前用户下pip已安装软件中没有看到 virtualenv 和  virtualenvwrapper 基本上就是以上的原因

    解决方法:

    - 如果是普通用户不要加sudo进行安装

    pip install  virtualenv 
    pip install  virtualenvwrapper
    
    安装之后使用pip list可以查看到已经成功的安装了两个软件, 接下来进行配置即可

    配置.bashrc
    注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    这时要在当前用户的目录下修改.bashrc, 意思就是root用户和普通用户的~目录下都存在一个.bashrc配置文件

    使用不同的用户执行 vim ~/.bashrc 这句命令时 其实是操作了不同的文件
    root 用户相当于执行了 vim /root/.bashrc
    普通用户则是 vim /home/allen(普通用户名)/.bashrc root用户要在/root/.bashrc中进行配置
    普通用户要在/home/allen(用户名)/.bashrc 下进行安装 在配置文件中添加配置内容
    WORKON_HOME=~/Envs # 设置virtualenv的统一管理目录, 创建的虚拟环境文件都会放在这里
    VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages' # 添加virtualenvwrapper的参数,生成干净隔绝的环境
    VIRTUALENVWRAPPER_PYTHON=/opt/python3/bin/python3 # 指定python解释器的本体(注意此路径随不同的linux环境改变而改变)
    解释器一定要进行配置, 否则会报错, 要指定pip对应的python解释器, 可以通过 pip -V 进行查看 pip对应的python解释器版本 source /opt/python34/bin/virtualenvwrapper.sh # 执行virtualenvwrapper安装脚本
    无法确定virtualenvwrapper.sh路径时可以通过find 进行查找, 查找范围基本可以确定到 /home/(用户名)/ 和 /usr/ find /usr/ -name "virtualenvwrapper.sh" -type f
    find /home/ -name "virtualenvwrapper.sh" -type f
    
    使用普通用户安装的一般都会在/home目录下, root用户安装的会在/usr目录下

    添加配置信息后重新加载配置文件  source ~/.bashrc

  2. 使用sudo pip list 和 pip list 查看后发现都安装了virtualenv 和 virtualenvwrapper ,切换root 用户输入find / -name "virtualenvwrapper.sh" 命令进行查找 会发现有两个查找结果.

    这是因为在bashrc配置文件中指定的python解释器与安装的virtualenvwrapper的解释器没有对应上导致的.

    解决方法:

    重新编辑配置文件内容, 修改配置信息
    
    可以通过一下的方法来查找虚拟环境和python解释器的对应关系:
    
    首先: 查看pip版本, 获取到pip对应的默认的版本
    pip -V 可以得到到类似下面的信息 (有一些情况pip会指向python3)
    pip 19.2.3 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
    确认pip指定的是python2版本的解释器, 然后使用which python查看python的解释器路径 然后在配置中配置python解释器和对应的virtualenvwrapper.sh 与情况一相同, 要修改自己使用的用户对应的配置文件.
  • 不过当root 和 普通用户都安装虚拟环境并进行配置之后,在切换用户时可能会出现如下报错:

虽然看起来是又搞砸了, 但是这个问题并不影响使用创建虚拟环境的使用, 个人不建议在root 和 普通用户下都安装虚拟环境.

有强迫症的同学可以自己去研究一下.

二. 存在多个python版本, 使用虚拟环境指定版本时出错

不同项目中可能会使用到不同的python版本,想要使用虚拟环境指定python版本创建虚拟环境时要注意:

  只需要安装一次虚拟环境, 在创建虚拟环境时通过指定python解释器的方式来创建不同python版本的虚拟环境.

解决方案和问题一种的基本类似, 最主要的问题还是要让配置信息中的虚拟环境和python解释器相对应,

建议安装其他的python版本时使用编译安装, 然后在/usr/bin下创建软连接, 连接中标明安装的版本号.

目前已知使用virtualenvwrapper过程中可能出现的错误:

1.zlib错误

触发错误的背景:

使用pip3安装virtualenv 和 virtualenvwrapper , 在指定自己安装的python2.7.16为python解释器时报错,无法引入zlib模块.

ImportError: No module named zlib

解决方案:

使用apt安装pip

sudo apt install python-pip

如果安装速度太慢可以更换apt官方源为国内源, 如ali源或者清华源. 
但要注意要使用官方网站中提供的源,不要随便使用百度中博客中提供的源,有大概率会和你的系统版本不匹配导致更新源失败,无法下载软件

安装成功之后,再次指定python2为解释器创建虚拟环境, 就可以成功创建.

----------------------------------------------------------------------------------------------------------------------------------

如果安装了pip仍然报如上错误, 极大可能是存在多个python版本冲突. 解决版本冲突请移步

2.stevedore模块错误

触发错误的背景:

使用python3作为解释器创建虚拟环境时,提示缺少stevedore模块

 ModuleNotFoundError: No module named 'stevedore'

解决方案:

使用pip3进行安装该模块即可

pip3 install stevedore
如果提示已经安装stevedore模块可以尝试卸载后再进行安装.
要注意:
  如果同时存在pip 和 pip3 要留意,不要卸载错了

成功安装stevedore模块之后,就可以创建虚拟环境

欢迎指出文章中的错误和不足~~~~~

Ubuntu18.0 解决python虚拟环境中不同用户下或者python多版本环境中指定虚拟环境的使用问题的更多相关文章

  1. Oracle中删除用户下所有对象的多种方法

      Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助. 方法1: drop user XX ...

  2. Oracle中scott用户下基本表练习SQL语句

    --选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...

  3. oracle中scott用户下四个基本表SQL语句练习

    --选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...

  4. python(1)在windows8.1下搭建python27和python36环境

    去Python官网下载需要的Python版本 https://www.python.org/ 我下载的是下面这两个版本: Python 2.7.13 Python 3.6.1 安装Python27时, ...

  5. python 基础1.1--windows/linux 下安装python

    一.windows下安装python 1>windows上python后缀是.msi的,下载下来后,直接双击运行.会在c盘生成python.exe的文件,把python.exe的文件加入到win ...

  6. Pyinstaller 打包python 到exe 在windows下免python环境运行python

    在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上 ...

  7. macOS 下 PHPStorm + Xdebug 调试 Docker 环境中的代码

    0x00 描述 宿主机是 mac mini,构建的项目在 docker 中,所以需要在 PHPStorm 上配置 Xdebug 进行远程代码调试. 0x01 环境 宿主机:macOS High Sie ...

  8. webpack4.5.0+vue2.5.16+vue-loader 实战组件化开发案例以及版本问题中踩的一些大坑!!!

    一 vue-loader 我们先不管脚手架,只说vue-loader,简单讲就是可将.vue文件打包,实现组件化开发,即一个.vue文件就是一个组件,开发中只需要引入这个.vue组件就可以了! 然后. ...

  9. 解决Affter Effect汉化版(cc2015之后的版本)中出现表达式错误的一种常用方法

    解决Affter Effect出现表达式错误的一种常用方法 问题:汉化版的AE中,使用模板会出现表达式错误之类的提示,可能会导致某些设置或者效果失效 解决办法: 方法一.将配置文件中的zh_CN 改为 ...

随机推荐

  1. eclipse spring3.X redis 整合-配置

    花了一天时间折腾redis的配置 用到的jar spring 3.1.1 aopalliance-1.0.jar commons-pool2-2.3.jar jedis-2.7.2.jar sprin ...

  2. Windows server 2008 R2 桌面服务器管理器打开提示:试图引用不存在的令牌

    来源:https://social.technet.microsoft.com/Forums/zh-CN/90f376a3-2b52-46c1-be34-4a2dbf4fdea2/winserver2 ...

  3. WIN 10 看不到SAMBA共享的硬盘

    1.SMB1.0/CIFS协议默认被关闭了,之前的勒索病毒就是用的这个协议的漏洞,所以你去“启动和关闭windows功能”下手动勾选启用SMB1.0/CIFS协议 2.管理员身份执行 sc.exe c ...

  4. CRISP-DM

    CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘标准流程". 此KDD过程模型于1999 ...

  5. 红绿灯 promise和原始方式实现

    Promise 方式 async+await function sleep(duration){ return new Promise(function(resolve){ setTimeout(re ...

  6. UI界面测试

    概念:指测试用户界面的风格是否满足用户要求.文字是否正确.页面是否美观.文字与图片组合是否完美.操作是否友好等. 1.窗体测试 { 窗体大小. 移动窗体. 缩放窗体. 显示分辨率. 状态栏. 工具栏. ...

  7. Laravel增加CORS中间件完成跨域请求

    原文地址: 跨域的请求 出于安全性的原因,浏览器会限制 Script 中的跨域请求.由于 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 构造 HTTP 请求的应用 ...

  8. 【MM系列】SAP 采购订单收货后不能修改价格的增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 采购订单收货后不能修改价格的 ...

  9. Java线程安全队列Queue实现原理

    原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...

  10. vue A对象赋值给B对象,修改B属性会影响到A问题

    实际在vue中  this.A = this.B,没有进行深层赋值,只是把this.A的地址指向了与this.B相同的地址,所有对于A的修改会影响到B. 解决相互影响的思路是在this.A必须是新建的 ...