利用pip和pipreqs导出当前python环境下所依赖的包总结

2024-02-10 05:18

本文主要是介绍利用pip和pipreqs导出当前python环境下所依赖的包总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

很多时候我们会去GitHub上找项目,或者说从其它的地方找到相关的代码,然后有一些已经帮忙做好了requirements文本,我们只需要利用pip就可以进行安装,但还有一部分其实是没有的,所以我们必须要通过其它的方式来得到我们想要的所有依赖。


生成依赖方式

当我们拿到一份较为完整的项目代码时,项目的根目录下是一定会有一个requirements文本文件的,这是作为有利于自己总结当前使用了多少包,并服务于他们节省相应时间的举措,互利共赢用在这里恰逢时机,所以,pip提供了相应的命令:

pip list	# 列举出pip当前环境下的包
pip freeze > requirements.txt	# 生成当前pip环境下的包文件

这里我们可以用如上的两条命令查看当前所需的包,然后如果没有错误提示基本就保证生成requirements文件成功。
在这里插入图片描述
在这里插入图片描述
但这里有一个问题,其实项目中用不到这么多的包,这里生成的requirements文件包含了整个环境下的所有包,那么我们可以通过删除包来达到效果。另外还要提及一下虚拟环境的好处了,因为每个虚拟环境都是作为一个项目,如果在端口切换成当前某个虚拟环境,就不会出现包的困扰了,虚拟环境的配置我之前都有总结过,可看如下链接:

linux下搭建虚拟环境

在Windows下搭建虚拟环境


上述只是基于我们是该项目的管理者,然后怎样使得当前项目能更有助于分享,同时也让项目更利于维护做的一些调整,那么当我们拿到一个新的没有requirements文件的怎么办?

第一种方式:边报错边调试

当我们拿到一个新项目,完全不知道缺少什么依赖或者条件,但知道该程序已经是开发完成没有错误的时候,就可以边运行,看着控制台的报错,一般是importerror,一个个装,这样直到不报错为止,就说明该环境安装成功了,但这样的后果花费的精力很大,另外就是即使能运行了还是对整个项目的脉络不清晰,对这些包的作用与版本没有一个完整的认识。

第二种方式:安装pipreqs模块

我们通过pip安装pipreqs包能对项目文件进行扫描,生成相对应的requirements文件,下面是我的步骤:

如果安装好了pipreqs文件,那么切换到当前项目目录下:

pipreqs ./	# 导出相应的包环境
pipreqs ./ --encoding=utf8	# 以utf8的形式导出包环境
pipreqs ./ --force	# 强制导出包环境,包括如果有同名requirements,可以进行重写

上述一般运行第一条命令就行,但我当时是在Windows的cmd下运行的,这里问题就出现了,它提示我有编码问题:

Traceback (most recent call last):File "f:\anaconda\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)File "f:\anaconda\lib\runpy.py", line 85, in _run_codeexec(code, run_globals)File "F:\anaconda\Scripts\pipreqs.exe\__main__.py", line 9, in <module>File "f:\anaconda\lib\site-packages\pipreqs\pipreqs.py", line 396, in maininit(args)File "f:\anaconda\lib\site-packages\pipreqs\pipreqs.py", line 341, in initextra_ignore_dirs=extra_ignore_dirs)File "f:\anaconda\lib\site-packages\pipreqs\pipreqs.py", line 75, in get_all_importscontents = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 621: illegal multibyte sequence

然后我就运行第二句,指定编码为utf8,但还是报一样的错误:

Traceback (most recent call last):File "f:\anaconda\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)File "f:\anaconda\lib\runpy.py", line 85, in _run_codeexec(code, run_globals)File "F:\anaconda\Scripts\pipreqs.exe\__main__.py", line 9, in <module>File "f:\anaconda\lib\site-packages\pipreqs\pipreqs.py", line 396, in maininit(args)File "f:\anaconda\lib\site-packages\pipreqs\pipreqs.py", line 341, in initextra_ignore_dirs=extra_ignore_dirs)File "f:\anaconda\lib\site-packages\pipreqs\pipreqs.py", line 75, in get_all_importscontents = f.read()File "f:\anaconda\lib\codecs.py", line 321, in decode(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 33: invalid start byte

那么这种情况就别再试了,应该是项目本身有问题,而不是pipreqs模块有bug,所以我就直接拷贝进了Linux环境中,同样输入上述命令,然后发现是其中一个文件有问题,于是我删除了该文件,再次运行生成了相应的包:
在这里插入图片描述
当然这里我是已经生成好了再运行了一遍,然后它说要用–force强制执行,然后我删除了requirements文件继续运行,但我的项目有点大,可能它搜索相应的模块需要时间,然后只要最后提示如下信息,那么就是成功了:

INFO: Successfully saved requirements file in /home/python/Desktop/requirements.txt

然后可以打开相应的存储位置,我们就会发现多了一个requirements文件。

这篇关于利用pip和pipreqs导出当前python环境下所依赖的包总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696207

相关文章

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D

使用Python实现一个简易计算器的新手指南

《使用Python实现一个简易计算器的新手指南》计算器是编程入门的经典项目,它涵盖了变量、输入输出、条件判断等核心编程概念,通过这个小项目,可以快速掌握Python的基础语法,并为后续更复杂的项目打下... 目录准备工作基础概念解析分步实现计算器第一步:获取用户输入第二步:实现基本运算第三步:显示计算结果进

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

Python如何实现高效的文件/目录比较

《Python如何实现高效的文件/目录比较》在系统维护、数据同步或版本控制场景中,我们经常需要比较两个目录的差异,本文将分享一下如何用Python实现高效的文件/目录比较,并灵活处理排除规则,希望对大... 目录案例一:基础目录比较与排除实现案例二:高性能大文件比较案例三:跨平台路径处理案例四:可视化差异报