如何解决Python包依赖问题

以简洁高效(指编程较为高效, 而不是运行速度)出名的Python, 在包依赖问题上有时候让人挠头.

一些新手复制了Github上的项目准备运行, 很多时候会在包依赖这一步上卡个半天.

(这里推荐新手最好在基于Linux的系统或者Mac上, 一些包[比如Scrapy的Win32相关依赖]可能无法直接通过包管理工具安装, 会让新手从入门到放弃).

其他涉及到项目需要到其他机器部署时, 也会遇到包依赖问题.

通过pip输出依赖

这个命令可能是很多同学用来输出依赖的命令, 但它输出的是当前环境下(笔者默认你使用的是Python的虚拟环境)的所有包, 也就是输出当前你安装的全部非Python标准库包)

笔者在自己终端上试了一下, 输出的文件如下: (这里暴露了我没有按项目建虚拟环境的烂习惯(逃)

对于按项目建环境的同学, 这种输出方式是没有多大问题的.

只要部署的时候在终端键入 就可以安装好依赖了, 但是对于没有严格区分项目环境的同学, 一次性安装了其他的包, 并不是一个好的解决方案.

通过pipreqs库输出依赖

如这个库的名称所示, 就是为了方便管理依赖而生.

与pip直接导出全部不同, pipreqs只导出指定项目下Python文件import的库用法如下

这里我切换到一个Django项目目录下, 打开requirements.txt, 内容是:

瞬间清爽不少.

通过Pipenv管理依赖

Pipenv, 汇集了Pip,Pipfile和Virtualenv的功能,是一个强大的命令行工具。

这里展示最简单的用法

安装好库.

切换到项目根目录

终端键入

如果你尚未建立 那么将会得到一个空白的 文本文件

此时我们在命令行中使用 , 会在Pipefile写入对应包信息, 之后用户要安装依赖时, 使用 即可.

如果你已经建立, 终端上会输出以下信息:

上面的输出意思是:

找到了requirements.txt, 但不是Pipfile, 正在转换...Pipefile现在将包含固定版本信息, 如果你的requirements.txt中已包含.我们推荐升级你的Pipefile到指定版本...

输出Pipenv文件, 得到以下内容:

可以清楚的看到整个文件结构

第一个是[source]是安装库所在源, 第二个是依赖库的信息, 第三个是当你开发环境所需要的包, 最后一个是Python版本.

当你需要区分开发环境和正式版本发布环境时, 可以使用以下命令:

如果正式版本发布时, 键入 , 将不会安装dev标记的包除非其他开发人员键入 , 才会安装所有包.

入门小白, 欢迎大家指出错误, 技术交流

今日作者: 光光同学_

不爱看电影的摄影师不是好的程序员

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180527G09C4P00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券