您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

包都装不上你写个锤子代码,N种姿势教你装包

时间:2019-12-10 14:16:22  来源:  作者:

但据不完全统计,即使在 pip 如此流行的今天,包安装问题依然困扰着大部分的 Python 新手,本人也经常帮一些工作经验三四年的 Python 开发同事解决包安装的问题。

那么接下来我们看下不同场景下python装包的解决方法:

1. Easy模式

通常情况下,你只需要键入以下命令即可安装成功,package为需要安装的包名:

pip install package

但有时候因为网络问题,并无法安装成功,毕竟pip默认的官网源在国外,这时候我们可以使用国内的pip源,你会感受到飞一般的下载速度。我常用的是aliyun的pip源,当然国内还有很多其他源供你选择,在此就不一一列出了。

切换国内源分为临时性和永久性两种,如果只是该次使用,在命令行后添加相应参数即可:

# 指定包名安装pip install package -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com# 依据requirements.txt安装pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

如果是想永久切换,可通过修改pip配置文件来达到此目的:

linux下修改 ~/.pip/pip.conf ,如果没有该文件则创建;

windows下修改 %HOMEPATH%pippip.ini ,如果没有则创建;

[global]trusted-host=mirrors.aliyun.comindex-url=http://mirrors.aliyun.com/pypi/simple/

至此,我们已经能解决60%的装包问题了

2. Medium模式

如果你安装过某些用C语言编写的python包,会发现上一步的做法并不能安装成功,命令窗口弹出诸如下面的报错。如果你连这个错误都没遇到过,那说明你做的python项目真不多

fatal error: Python.h: No such file or directory

那装不上到底是为什么呢??

根据本文主题,我将python三方包粗略分为两类:

1. 纯 Python编写的软件包 2. C/C++ 语言编写的软件包

针对第二类情况,你需要确保系统上有对应的c/c++编译器及python开发者工具才能装包成功。

linux各个发行版,要先确保gcc、g++已经安装,然后再安装python开发者工具,以redhat/centos为例:

yum install gcc gcc-c++yum install python-devel# 或安装对应python版本的开发者工具yum install python3-develyum install python36-devel

Debian/Ubuntu dev工具名字稍有不同,但思路一样

apt-get install python-dev

windows则需要安装vc++ for python x.x(即python对应的版本号),或者使用MinGw进行编译,参考阅读:

私信小编01 领取完整项目代码~

Microsoft Visual C++ Compiler for Python 3.4 [1]

如果你实在觉得麻烦,还有一个网站专门提供windows下的各种python包,可在不具备编译环境的情况下,选择合适自己的python环境进行安装,使用方法非常简单,pip install xxx.whl即可。网址如下,不谢

Unofficial Windows Binaries for Python Extension Packages [2]

这个站点虽然不是万能的,但应付大部分在windows下开发的pythoner已经绰绰有余了。不过据本人亲身体会,一些的特定版本的包这个站点还真没有,所以我常用的开发模式其实是windows下跑ide,代码则共享至linux下运行,因为大家实际部署生产环境也是在linux,总之怎么舒服怎么来。

另外,有些包是需要相应的工具依赖的,例如pynmap,要求系统先安装了nmap,用的人一定要心里有数,不然可能将大量时间浪费在环境配置上。

3. Hard模式

3.1 需求一

想象在某个极其恶劣的环境,老板给你提出了一个很不人道的需求:

小王,申请的服务器下来了,去把代码部署下吧

于是在某个风雨交加的晚上,你开始连接至生产服务器,手动部署代码,想着10分钟后就可以下楼撸串了,心里还有点小激动呢。然而登上服务器才发现:

1. 生产服务器无法访问外网 2. 公司搭建的内网pip源压根就不能用或者太久没更新压根就没你要的包

这时候真是叫天天不应,叫地地不灵。这种情况多见于国内的中、大型企业,有严格的网段划分和权限控制,但某些方面又做的不够好,比如源的管理问题。但活还是要干的,怎么办?

方法一:

先将各个所需的三方包下载至本地,然后上传至服务器,挨个pip install。这里提醒一句,其实pip install package 或 pip install -r requirements.txt时,目标可以是包名,也可以是包的安装目录,所以聪明的pythoner,怎么提高效率你懂的:)

方法二:

直接将三方包打包至项目代码中,简单粗暴,缺点是增加了项目代码体积

3.2 需求二:

在某个风和日丽的早晨,领导说:

小王啊,我们有个脚本需要部署到其他运维的服务器当agent用。

然后你经过调查发现脚本里面要用到一个三方包,但对方的服务器可能装过也可能没装过,于是你在脚本运行初始阶段设置了一个逻辑:

if xxx_package is exist: import xxx start run codeelse: pip install xxx_package import xxx start run code

然后你傻乎乎的调用了python的系统命令来执行包的安装操作,诸如os.system/os.popen/subprocess.Popen,发现并没有什么卵用,包确实执行安装了,但是代码初次运行的环境还是检测不到该包的存在,wtf?

经过一番分析发现,安装发生在脚本启动之后,上述安装方法并不会将新安装的包同步至当前的运行过程中,因为python脚本是在启动之初就将import的包导入当前内存中的,也就是说我们新安装的并没有被热更新过来,归根结底是因为动态装包的姿势不对,下面给出动态装包的代码示例,重点在于install函数部分,当年我可是在这个坑了待了好久才出来,说多了都是泪!_!:

import pip
def install(package): if hasattr(pip, 'main'): pip.main(['install', package]) else: pip._internal.main(['install', package])
# Exampleif __name__ == '__main__': try: import xxx print('Yeah, the package is here, ready go') # todo run main code except ImportError: print('oh no, it seems like you must install this package then you can use it') install('xxx') # todo run main code

4. 写在最后

至此,你已经基本领略了 Python 装包 99% 以上的姿势,可以开开心心的 coding 了。如果你上面的都看完了,那么可以看下我一开始就想推荐的一篇文章,有点老,但通过了解python包管理工具的历史你对上述内容的理解会更深刻,同时又能体会到今天的世界是多么的美好。

Python 包管理工具解惑 [3]

当然,对于“包无法安装”这个问题,如果你还有其他更好的解决方案,或者对本文章有批评、指正或疑虑的地方,可在评论中指出,以便于我更新改正,谢谢大家。



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言什么是数据脱敏数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护常用脱敏规则替换、重排、加密、截断、掩码良好的数据脱敏实施1、尽...【详细内容】
2021-12-28  Tags:   点击:(4)  评论:(0)  加入收藏
河南最有名的“13碗面”,吃过10种以上的一定是地道河南人,你吃过几碗?河南位于黄河中下游,优越的地理位置和条件,让河南的种植业在全国脱颖而出,被称为全国的“粮仓”。小麦是河南...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
在狗界中,有些狗狗比较凶残、霸道,今天我们就来说说被称为“犬中四煞”的4种狗,请认住它们的长相,看见了要绕路走! NO1:黑狼犬产地:中国寿命:11-12年黑狼犬是狼狗的一种,长大高大威猛...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
协议下的体面离婚 2015年1月 方晴供职于一家外企,袁亮硕士毕业后开了家公司。两人相识、恋爱后走进婚姻殿堂。 方晴和袁亮的儿子小浩出生了。本该是其乐融融的三口之家,却在一...【详细内容】
2021-12-28  Tags:   点击:(2)  评论:(0)  加入收藏
中国人神话世界五千年到一万年之前到底是一个什么样的世界?相信这个问题应该是困扰了大家许久吧!其实这些问题可以从远古时代的三皇五帝开始说起,三皇五帝对于中国人的影响就如...【详细内容】
2021-12-28  Tags:   点击:(2)  评论:(0)  加入收藏
去年有个新闻,说的是一名印度女孩自小被欧洲有钱人家收养,长大后要回来给自己出生的村子捐钱做慈善。等她回村的时候,村里人专门为女孩修了一条路。表面上看,这貌似是个暖心的故...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
日本在今年又给大家带来了一个巨大消息,日本著名的球星本田圭佑出资设立的一家公司,正式发售了飞行摩托车。 在之前可是在电视或者是电影中才能看到的,是具备了未来科幻的一个...【详细内容】
2021-12-28  Tags:   点击:(4)  评论:(0)  加入收藏
V社今日公布了2021年Steam最畅销游戏榜单,其中涵盖了本年度Steam上收入最高的100款游戏。为了得出每款游戏的总收入,Steam计算了2021年1月1日至2021年12月15日的游戏销售额、...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
“都怪我一时糊涂铸下大错,这几年为了蒙混过关,拆东墙补西墙就怕被发现,我对不起信任我的领导同事,更对不起我的家人。”内蒙古某国有合资公司原出纳员包某在庭审现场听取公诉人...【详细内容】
2021-12-28  Tags:   点击:(2)  评论:(0)  加入收藏
2021年黄金价格下跌11.3%,黄金现在已经下跌了6.5%。白银价格一度下跌19.3%,白银现在已经下跌了15%。美元通胀。白银自2020年2月份以来,五家中央银行(Fed、欧洲中央银行、日本中...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条