解决python 虚拟环境删除包无法加载的问题


Posted in Python onJuly 13, 2020

项目开发一直在docker的虚拟环境上,遇到了一个问题,就是把虚拟环境的包删掉(rm -rf xxx)之后,再重新拷贝一个(跟原来包一模一样的文件夹)进去发现pycharm再也找不到这个包了,后来在同事的帮助下一步步的解决了这个问题:

解决流程:

1.定位问题

在虚拟环境下引入这个包:

#进入虚拟环境
source bin/activate
#1.进入python
#2.引入报错的包
(xenwebsite-env)[root@aeb02c10de04 xenwebsite-env]# python
Python 2.7.3 (default, Nov 22 2012, 09:29:29) 
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyxlib.flaskext.decorators import with_db_retry
# 报错:说明当前环境下找不到这个包
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ImportError: No module named pyxlib.flaskext.decorators
# 查看当前换下所有包的路径
>>> import sys
>>> sys.path
['', '/opt/work/web/xenwebsite/xenwebsite-env/lib64/python27.zip', '/opt/work/web/xenwebsite/xenwebsite-env/lib64/python2.7', /opt/work/web/xenwebsite/xenwebsite-env/lib/python2.7/site-packages/httplib2-0.9-py2.7.egg]
#发现没有我们路径,为了验证当前包是不是正确,那么把这个路径加入到当前的sys.path 里面来。
>>> sys.path.append('/opt/work/web/xenwebsite/xenwebsite-env/lib/python2.7/site-packages/pyxlib-1.1.dev_r1349-py2.7.egg')
# 重新引入这个包看看报不报错
>>> from pyxlib.flaskext.decorators import with_db_retry
# 这次没有报错,说明包本身没有问题,那么应该就是当前虚拟环境没有加载这个包,所以当前问题就是怎么让虚拟环境来加载这个包:退出python环境
>>> exit()
# 在python里面,xxx.pth 文件是保存包路径的文件,于是我们想到,当前的虚拟环境下面的.pth文件是不是没有加载这个,于是先查找这个.pth文件
(xenwebsite-env)[root@aeb02c10de04 xenwebsite-env]# find / -name *.pth
/opt/work/web/xenwebsite/xenwebsite-env/lib/python2.7/site-packages/easy-install.pth
/opt/work/web/xenwebsite/xenwebsite-env/lib/python2.7/site-packages/setuptools.pth
# 发现2个pth文件,我们打开看看发现,我们的第三方包都在 easy_install.pth 文件里面,而且发现报错的那个包并没有在这个列表里面:
./setuptools-34.3.3-py2.7.egg
./Flask_Cors-3.0.2-py2.7.egg
# 于是就把报错的包路径加入进来
./setuptools-34.3.3-py2.7.egg
./Flask_Cors-3.0.2-py2.7.egg
./pyxlib-1.1.dev_r1349-py2.7.egg
# 重新把pycharm 重启发现包已经可见了,问题解决了

原因分析:

正常情况下放置在python的site-package 文件夹下的文件都会被当前的python环境给识别,但是发现一个问题就是虚拟环境下面如果把一个python的安装包(文件夹)删除之后,对应的easy_install.pth 文件就会把这一条记录给移除掉,即便是后面把它给重新复制回来了,虚拟环境也不会把它加载进来(对于虚拟环境来说,自动移除已经删除的目录是没有问题的,因为这样总不会出问题,但是自动添加放入的文件夹会有问题,因为放入的文件夹不一定是python文件),所以如果一个包被删除之后,要重新把它复制进来就需要手动的去修改 easy_install.pth文件,把那个文件夹复制进来。

解决流程:

1.验证当前环境的路径里面有没有我们要使用的包

2.如果有,但是无法使用说明包有问题,删除重新添加

3.如果没有,手动的把包路径append到当前的sys.path里面

4.引入当前包:如果报错把文件夹删除重新导入,如果不报错说明包没有问题

5.解决虚拟环境引用当前包的问题:虚拟环境的 easy_install.pth 路径下添加当前包的路径

补充知识:python删除pipenv安装virtualenv后虚拟环境中的库无法正常使用的解决方案 fitz安装错误解决方案

虚拟环境配置

1.编程环境配置调整

昨晚,编程环境再次出现问题,笔记本电脑上的虚拟环境再次无法正常通过Flask驱动,但是虚拟环境中通过pip3 list依旧可以查看到已经安装的库,但是遗憾的是并没有办法启动这些库。最后一咬牙,直接删除了已经安装的Python,并把之前通过pipenv安装的库全部进行了删除,尽可能的清理掉后,准备全部重新安装库。

windows中安装python库,可以先更换更新源,在当前用户目录下,如我的电脑是 “C:\Users\27496” 下面新增pip.ini 文件,在文件中添加一行

“http://mirrors.aliyun.com/pypi/simple/”

就可以更换python安装各种库到阿里云的更新源上,速度非常快。利用以前下载的3.6.6的安装包,今天在安装时突然又报错,无法正常安装。重新到官网下载,链接地址是:

https://www.python.org/ftp/python/3.6.6/python-3.6.6-amd64.exe

这是可执行的安装包。可以在安装时默认安装pip和添加到PATH路径,避免人工再次去添加。后来发现官网下载太慢了。就直接在cdsn上面重新下载了一个3.6.6的安装包,然后重新安装到D盘,然后又删除了各个虚拟环境下的venv包(早期喜欢用pipenv,现在发现特坑),然后重新把所需要的安装包安装一次,虚拟环境恢复正常,不容易,不容易。

Python fitz库安装的两个坑

fitz使用第一坑

python库安装遇到了很多难题,比如安装fitz库,直接无法正常安装,上网查,

traits‑6.0.0‑cp38‑cp38‑win_amd64.whl

必须提前下载安装这样一个文件。先试试。python离线库下载地址大全,网址:

python各类库whl文件的下载地址,可以直接点击

这里面有所有的离线包可以下载非常全面。到里面找这个

traits‑6.0.0‑cp38‑cp38‑win_amd64.whl

结果下载安装时,直接报错,提示不适用该平台。我发现cp38,考虑是python3.8适用的,于是重新进去下载3.6版本的。下面是3.6的32和64位系统两个文件名

traits‑6.0.0‑cp36‑cp36m‑win_amd64.whl

traits‑6.0.0‑cp36‑cp36m‑win32.whl

下载完成后,将文件放入python安装文件夹的scripts文件夹中,cmd命令进入该文件夹,pip3 install加安装文件名直接安装。再通过安装fitz,安装成功。

#依次安装如下包,第一个必须在文件所在目录安装
pip3 install traits‑6.0.0‑cp36‑cp36m‑win_amd64.whl
pip3 install fitz

fitz使用第二坑

仅仅安装第一坑中的文件后,可以直接通过pip安装fitz,但是,输入import fitz后,会报错,提示No module named ‘frontend'

import fitz

很奇怪是吧, 我也很奇怪,明明安装好了,就是不能加载包,我估计是缺少一个依赖,然后直接百度后,安装了这个:

pip3 install PyMuPDF

然后import成功。fitz两个坑,真心花了一小会功夫。

以上这篇解决python 虚拟环境删除包无法加载的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python重试装饰器示例
Feb 11 Python
Python中正则表达式的详细教程
Apr 30 Python
python字典基本操作实例分析
Jul 11 Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 Python
你所不知道的Python奇技淫巧13招【实用】
Dec 14 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
Windows10下 python3.7 安装 facenet的教程
Sep 10 Python
Pytorch 的损失函数Loss function使用详解
Jan 02 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
Jul 13 #Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 #Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 #Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 #Python
浅析Python 抽象工厂模式的优缺点
Jul 13 #Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 #Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 #Python
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
改变Apache端口等配置修改方法
2008/06/05 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
javascript实用小函数使用介绍
2013/11/11 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
django项目搭建与Session使用详解
2018/10/10 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
python线程池如何使用
2020/05/28 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
几个判断型的面试题
2012/07/03 面试题
员工工作表扬信范文
2014/01/13 职场文书
法律六进活动方案
2014/03/13 职场文书
小学二年级学生评语
2014/04/21 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
语文教师个人工作总结
2015/02/06 职场文书
销售督导岗位职责
2015/04/10 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
军训后的感想
2015/08/07 职场文书
高一军训口号
2015/12/25 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android
Android开发手册自定义Switch开关按钮控件
2022/06/10 Java/Android