解决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实现发送email的几种常用方法
Aug 18 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python中的数学运算操作符使用进阶
Jun 20 Python
基于python 字符编码的理解
Sep 02 Python
python使用suds调用webservice接口的方法
Jan 03 Python
对python读取zip压缩文件里面的csv数据实例详解
Feb 08 Python
Python解决pip install时出现的Could not fetch URL问题
Aug 01 Python
Python pandas用法最全整理
Aug 04 Python
python实现网站微信登录的示例代码
Sep 18 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
python 代码运行时间获取方式详解
Sep 18 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
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
PHP7内核之Reference详解
2019/03/14 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
js中小数转换整数的方法
2014/01/26 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python多线程编程中的join函数使用心得
2014/09/02 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
个人自我鉴定怎么写
2013/10/28 职场文书
劳资员岗位职责
2013/11/11 职场文书
网络维护管理员的自我评价分享
2013/11/11 职场文书
大客户销售经理职责
2013/12/04 职场文书
体育运动口号
2014/06/09 职场文书
比赛口号大全
2014/06/10 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
思品教学工作总结
2015/08/10 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
解决Pytorch中关于model.eval的问题
2021/05/22 Python
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技