项⽬开发⼀直在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.] #发现没有我们路径,为了验证当前包是不是正确,那么把这个路径加⼊到当前的sys.path ⾥⾯来。
>>> sys.path.append('/opt/work/web/xenwebsite/xenwebsite-env/lib/python2.7/site-packages/pyxlib-1.1.dev_')
# 重新引⼊这个包看看报不报错
>>> 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.
./Flask_Cors-3.0.
文件无法删除怎么办# 于是就把报错的包路径加⼊进来
./setuptools-34.3.
./Flask_Cors-3.0.
./pyxlib-1.1.dev_
# 重新把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 ⽂件,在⽂件中添加⼀⾏
就可以更换python安装各种库到阿⾥云的更新源上,速度⾮常快。利⽤以前下载的3.6.6的安装包,今天在安装时突然⼜报错,⽆法正常安装。重新到官⽹下载,链接地址是:
这是可执⾏的安装包。可以在安装时默认安装pip和添加到PATH路径,避免⼈⼯再次去添加。后来发现
官⽹下载太慢了。就直接在cdsn上⾯重新下载了⼀个3.6.6的安装包,然后重新安装到D盘,然后⼜删除了各个虚拟环境下的venv包(早期喜欢⽤pipenv,现在发现特坑),然后重新把所需要的安装包安装⼀次,虚拟环境恢复正常,不容易,不容易。
Python fitz库安装的两个坑
fitz使⽤第⼀坑
python库安装遇到了很多难题,⽐如安装fitz库,直接⽆法正常安装,上⽹查,
traits‑6.0.0‑cp38‑cp38‑win_amd64.whl
必须提前下载安装这样⼀个⽂件。先试试。python离线库下载地址⼤全,⽹址:
这⾥⾯有所有的离线包可以下载⾮常全⾯。到⾥⾯这个
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 虚拟环境删除包⽆法加载的问题就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
发布评论