Python项目生成requirements

本文介绍了在Python项目中生成requirements.txt的两种方法:使用`pip freeze`和`pipreqs`。`pip freeze`可能列出所有环境中的包,而`pipreqs`通过扫描项目目录生成更精确的依赖清单,但可能需要手动调整。遇到编码问题时,使用`pipreqs`可添加参数解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

详细版本见个人博客:Python项目生成requirements


一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个Python第三方包的list,一般都叫做requirements.txt。本文介绍了两种生成requirements.txt的方法。

一、使用pip freeze

pip freeze > requirements.txt

这种方式配合virtualenv才好使,否则把整个环境中的包都列出来了。

下面是在虚拟环境中生成的requirements.txt文件内容:

cat requirements.txt
certifi==2019.3.9
chardet==3.0.4
fake-useragent==0.1.11
idna==2.7
lxml==4.2.5
numpy==1.16.3
pandas==0.22.0
python-dateutil==2.8.0
pytz==2019.1
requests==2.20.0
six==1.12.0
urllib3==1.24.3

二、使用 pipreqs

这个工具通过对项目目录的扫描,自动发现使用了那些类库,自动生成依赖清单。此工具是基于imports,即你的项目引入了哪个包,此工具才会把引入的包写到requirements.txt中,要比pip freeze干净。这个工具的缺点是可能会有些偏差,需要检查并自己调整下。

pipreqs ./

有可能会报如下错误:

Traceback (most recent call last):
  File "c:\program files\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\program files\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Program Files\Python36\Scripts\pipreqs.exe\__main__.py", line 9, in <module>
  File "c:\program files\python36\lib\site-packages\pipreqs\pipreqs.py", line 396, in main
    init(args)
  File "c:\program files\python36\lib\site-packages\pipreqs\pipreqs.py", line 341, in init
    extra_ignore_dirs=extra_ignore_dirs)
  File "c:\program files\python36\lib\site-packages\pipreqs\pipreqs.py", line 75, in get_all_imports
    contents = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 12: illegal multibyte sequence

这是由于编码问题所导致的,加上encoding参数即可,如下:

pipreqs ./ --encoding=utf-8

下面我看下生成的requirements.txt文件内容:

cat requirements.txt
requests==2.20.0
fake_useragent==0.1.11
lxml==4.2.5
pandas==0.22.0

详细版本见个人博客:Python项目生成requirements

### 如何生成 Python 项目的需求文件 `requirements.txt` 为了确保 Python 项目的可移植性和一致性,创建并维护一个精确的 `requirements.txt` 文件至关重要[^3]。以下是几种有效的方法来生成或更新这个需求文件。 #### 方法一:使用 pip freeze 这是最常见的方法之一。通过执行命令: ```bash pip freeze > requirements.txt ``` 此操作会捕获当前虚拟环境中安装的所有包及其版本号,并将其写入到 `requirements.txt` 中[^4]。 然而需要注意的是,这种方法可能会捕捉到一些不必要的依赖项——即那些并非直接由开发者指定而是作为其他库间接引入的次级依赖关系。因此,在某些情况下可能需要手动编辑该文件以移除不需要的部分。 #### 方法二:利用专门工具如 pipreqs 自动生成精简版 对于希望只包含必要的顶级依赖而不涉及任何额外子依赖的情况,则可以考虑采用像 `pipreqs` 这样的第三方工具: 首先需安装 `pipreqs`: ```bash pip install pipreqs ``` 接着运行如下指令来自动生成仅含必需品的 `requirements.txt` : ```bash pipreqs /path/to/project ``` 这种方式能够更精准地反映实际所需的外部资源列表,有助于构建更加轻量化的生产环境配置[^1]。 #### 方法三:编写自定义脚本来获取特定条件下的依赖信息 如果项目结构较为复杂或者有特殊需求(比如只想记录部分模块),也可以选择编写一段简单的 Python 脚本来进行定制化处理。例如下面这段代码展示了如何读取已知源码中的导入语句从而推断出所需安装哪些软件包[^2]: ```python import ast from collections import defaultdict def get_imported_modules(file_path): with open(file_path) as f: tree = ast.parse(f.read(), filename=file_path) imports = defaultdict(list) for node in ast.walk(tree): if isinstance(node, (ast.Import, ast.ImportFrom)): module_name = getattr(node.module, 'name', None) or '' names = [alias.name.split('.')[0] for alias in node.names] imports[module_name].extend(names) return dict(imports) if __name__ == '__main__': result = get_imported_modules('your_project_file.py') print(result) ``` 上述三种方式各有优劣,可以根据具体应用场景和个人偏好灵活选用最适合的一种或多种组合起来使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值