相关文章推荐
讲道义的闹钟  ·  如何释放Python占用的内存?开发者社区·  3 周前    · 
聪明的橙子  ·  python内存机制与垃圾回收、调优手段 ...·  3 周前    · 
重情义的单杠  ·  Python中如何快速解析JSON对象数组 ...·  1 周前    · 
虚心的薯片  ·  臺灣大學資訊系統訓練班·  5 天前    · 
好帅的野马  ·  nodejs调用脚本(python/shel ...·  2 天前    · 
强悍的火柴  ·  与 SpringSecurity ...·  2 周前    · 
不开心的骆驼  ·  沈阳地铁10号线站点线路图(丁香湖-张沙布) ...·  2 月前    · 
善良的筷子  ·  Analysis and Design ...·  2 月前    · 
豪情万千的企鹅  ·  重磅!10年砸650亿!小米官宣造车,雷军亲 ...·  5 月前    · 
成熟的西瓜  ·  《街头霸王6》2023世界顶级选手齐聚南非红 ...·  1 年前    · 
Code  ›  如何解决Python包依赖问题开发者社区
python
https://cloud.tencent.com/developer/article/1166239
任性的大象
2 年前
作者头像
benny
0 篇文章

如何解决Python包依赖问题

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 程序员的碎碎念 > 如何解决Python包依赖问题

如何解决Python包依赖问题

作者头像
benny
发布 于 2018-07-26 14:43:19
1.4K 0
发布 于 2018-07-26 14:43:19
举报

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

一些新手复制了Github上的项目准备运行, 很多时候会在包依赖这一步上卡个半天. (这里推荐新手最好在基于Linux的系统或者Mac上, 一些包[比如Scrapy的Win32相关依赖]可能无法直接通过包管理工具安装, 会让新手 从入门到放弃 ). 其他涉及到项目需要到其他机器部署时, 也会遇到包依赖问题.

# 这可能是部署过程中最常见的错误
ModuleNotFoundError: No Module named 'XXX'

通过pip输出依赖

pip freeze > requirements.txt

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

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

# 省略N个库
Django==1.11.8
django-mongonaut==0.2.21
docopt==0.6.2
Flask==0.10.1
Flask-Bootstrap==3.0.3.1
Flask-Login==0.3.1
Flask-Mail==0.9.0
Flask-Migrate==1.1.0
Flask-Moment==0.2.1
Flask-PageDown==0.1.4
Flask-Script==0.6.6
Flask-SQLAlchemy==1.0
Flask-WTF==0.9.4
ForgeryPy==0.1
html5lib==1.0b3
hyperlink==17.3.1
idna==2.6
incremental==17.5.0
itsdangerous==0.23
Jinja2==2.7.1
lxml==4.1.1
Mako==0.9.1
Markdown==2.3.1
MarkupSafe==0.18
mongoengine==0.9.0
numpy==1.14.0
pandas==0.22.0
parsel==1.3.1
pdfkit==0.6.1
pipreqs==0.4.9
pyasn1==0.4.2
pyasn1-modules==0.2.1
pycparser==2.18
PyDispatcher==2.0.5
pymongo==2.8
PyMySQL==0.7.9
pyOpenSSL==17.5.0
python-dateutil==2.6.1
pytz==2017.3
queuelib==1.4.2
requests==2.18.4
requests-file==1.4.3
scrape==0.9.12
Scrapy==1.5.0
# 省略N+1个库

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

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

通过pipreqs库输出依赖

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

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

# 安装
pip install pipreqs
# 切换到项目目录
# 输出requirements.txt到项目根目录下
pipreqs --use-local ./

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

pandas==0.22.0
django_debug_toolbar.egg==info
mongoengine==0.9.0
Django==1.11.8

瞬间清爽不少.

通过Pipenv管理依赖

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

这里展示最简单的用法

  1. pip install pipenv 安装好库.
  2. 切换到项目根目录
  3. 终端键入 Pipenvinstall

如果你尚未建立 requirements.txt 那么将会得到一个空白的 Pipfile 文本文件 此时我们在命令行中使用 pipenv install包名 , 会在Pipefile写入对应包信息, 之后用户要安装依赖时, 使用 pipenv install 即可. 如果你已经建立, 终端上会输出以下信息:

requirements.txt found, instead of Pipfile! Converting…
Warning: Your Pipfile now contains pinned versions, if your requirements.txt did. 
We recommend updating your Pipfile to specify the "*" version, instead.
...

上面的输出意思是:

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

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

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
mongoengine = "==0.9.0"
"django-debug-toolbar.egg" = "==info"
django = "==1.11.8"
pandas = "==0.22.0"
 
推荐文章
讲道义的闹钟  ·  如何释放Python占用的内存?开发者社区
3 周前
聪明的橙子  ·  python内存机制与垃圾回收、调优手段 - 长安223
3 周前
重情义的单杠  ·  Python中如何快速解析JSON对象数组 - 小小程序员ol
1 周前
虚心的薯片  ·  臺灣大學資訊系統訓練班
5 天前
好帅的野马  ·  nodejs调用脚本(python/shell)和系统命令 - 单曲荨环
2 天前
强悍的火柴  ·  与 SpringSecurity 合并使用时,使用自定义的 UserDetails 对象,用户登录成功后无法发起请求 · Issue #12073 · apache/dubbo · GitHub
2 周前
不开心的骆驼  ·  沈阳地铁10号线站点线路图(丁香湖-张沙布)-沈阳地铁10号线首末车时间-运营时间-沈阳地铁_车主指南
2 月前
善良的筷子  ·  Analysis and Design of Starlink-like Satellite Constellation
2 月前
豪情万千的企鹅  ·  重磅!10年砸650亿!小米官宣造车,雷军亲自带队-行业资讯-上海新能源汽车技术展览会丨上海新能源汽车供应链展览会丨上海国际新能源汽车技术与供应链展览会官网丨Shanghai Internationa
5 月前
成熟的西瓜  ·  《街头霸王6》2023世界顶级选手齐聚南非红牛杯 全部比赛完整版_哔哩哔哩bilibili_街头霸王
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号