python如何安装第三方包

  python有个优越的地方就是它可以使用大量的第三方包,那么问题来了,如何安装第三方包呢?接下来介绍几种在不同场景下python装包的方法。

1. 初级

  1.1 使用pip工具,具体的就是先是激活环境,然后用install命令安装:

pip install packagename

  1.2 但有时候因为网络问题,并无法安装成功,因为pip默认的官网源在国外。
在这里插入图片描述
这时候我们可以使用国内的pip源。pip国内的一些镜像:
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学(推荐) https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
  对于临时使用可以这样做:在pip install的后面加上-i参数并指定pip源,

pip install packagename -i https://pypi.tuna.tsinghua.edu.cn/simple

  1.3 如何批量安装包

pip install -r requirements.txt  -i 国内镜像源url
2. 中级

  如果你安装过某些用c语言编写的python包,会发现上一步的做法并不能安装成功,命令窗口弹出诸如下面的报错。

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

  那为什么装不上呢?因为这个包它是用c/c++写的不是用纯python写的。python的第三方包粗略分为两类:纯python编写的软件包;c/c++语言编写的软件包。针对第二类情况,你需要确保系统上有相应的c/c++编译器及python开发者工具才能装包成功。
  linux各个发行版,要先确保gcc、g++已经安装,然后再安装python开发者工具,以redhat/centos为例:

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

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

apt-get install python-dev

  windows则需要安装vc++ for python x.x(即python对应的版本号),或者使用MinGw进行编译,参考阅读:https://stackoverflow.com/questions/29909330/microsoft-visual-c-compiler-for-python-3-4

3. 高级

需求一:
  想象在某个极其恶劣的环境,老板给你提出了一个很不人道的需求:小王,申请的服务器下来了,去把代码部署下吧于是在某个风雨交加的晚上,你开始连接至生产服务器,手动部署代码,想着10分钟后就可以下楼撸串了,心里还有点小激动呢。然而登上服务器才发现:生产服务器无法访问外网公司搭建的内网pip源压根就不能用或者太久没更新压根就没你要的包这时候真是叫天天不应,叫地地不灵。这种情况多见于国内的中、大型企业,有严格的网段划分和权限控制,但某些方面又做的不够好,比如源的管理问题。但活还是要干的,怎么办?
  方法一:先将各个所需的三方包下载至本地,然后上传至服务器,挨个pip install或批量安装。
  方法二:直接将三方包打包至项目代码中,简单粗暴,缺点是增加了项目代码体积。

需求二:
  在某个风和日丽的早晨,领导说:小王啊,我们有个脚本需要部署到其他运维的服务器当agent用。然后你经过调查发现脚本里面要用到一个三方包,但对方的服务器可能装过也可能没装过,于是你在脚本运行初始阶段设置了一个逻辑:

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

  然后你傻乎乎的调用了python的系统命令来执行包的安装操作,诸如os.system/os.popen/subprocess.Popen,发现并没有什么卵用,包确实执行安装了,但是代码初次运行的环境还是检测不到该包的存在?
  经过一番分析发现,安装发生在脚本启动之后,上述安装方法并不会将新安装的包同步至当前的运行过程中,因为python脚本是在启动之初就将import的包导入当前内存中的,也就是说我们新安装的并没有被热更新过来,归根结底是因为动态装包的姿势不对,下面给出动态装包的代码示例,重点在于install函数部分。

import pip
def install(package):
    if hasattr(pip, 'main'):
        pip.main(['install', package])
    else:
        pip._internal.main(['install', package])

# Example
if __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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值