解决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使用pyhook监控键盘并实现切换歌曲的功能
Jul 18 Python
使用pdb模块调试Python程序实例
Jun 02 Python
python和bash统计CPU利用率的方法
Jul 10 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
python 调用win32pai 操作cmd的方法
May 28 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
python多维数组分位数的求取方式
Mar 03 Python
简单了解如何封装自己的Python包
Jul 08 Python
使用pytorch实现线性回归
Apr 11 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基于curl实现的股票信息查询类实例
2016/11/11 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
2020/07/28 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
用POSTMAN发送JSON格式的POST请求示例
2018/09/04 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
Vue 自定义指令功能完整实例
2019/09/17 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python表示矩阵的方法分析
2017/05/26 Python
numpy自动生成数组详解
2017/12/15 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
python 实现图片批量压缩的示例
2020/12/18 Python
Django和Ueditor自定义存储上传文件的文件名
2021/02/25 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
vue项目实现分页效果
2021/03/24 Vue.js
土木工程应届生求职信
2013/10/31 职场文书
运动会广播稿80字
2014/01/23 职场文书
党员领导干部承诺书
2014/05/28 职场文书
python 中的jieba分词库
2021/11/23 Python
Consul在linux环境的集群部署
2022/04/08 Servers