导出requirements.txt

文章目录


requirements.txt

在Python项目中,通常使用requirements.txt文件来列出所有需要的第三方库和模块。这个文件通常位于项目的根目录下,并且在安装Python项目时,可以使用pip命令来安装requirements.txt中列出的所有依赖项。

创建好requirements.txt文件后,可以将它提交到版本控制系统中,这样其他开发者克隆项目后,可以通过运行pip install -r requirements.txt来安装所有必需的依赖项。

导出环境中所有包

使用pip:

任意目录打开终端,运行以下命令:

复制代码
pip freeze > requirements.txt

这将列出当前Python环境中安装的所有包及其版本,并将它们保存到requirements.txt文件中。导出结果会存在路径,生成的requirements.txt文件在当前目录下。

这个方法简单快捷,但可能会包含一些实际上项目并不直接依赖的包。

导出当前项目的包

如果你只想导出项目实际使用到的包,可以使用pipreqs工具。这个工具会分析你的项目代码,识别出实际用到的Python包,并生成requirements.txt文件。

pipreqs 是一个Python包,它可以根据项目中使用的模块自动生成 requirements.txt 文件。这个工具非常适用于当你接手一个新项目或者需要重新创建依赖列表时。以下是一些常用的 pipreqs 参数及其解释:

  • --force-f:强制覆盖现有的 requirements.txt 文件。
  • --savepath-p:指定生成 requirements.txt 文件的路径。
  • --use-local-l:使用本地项目环境中的包版本,而不是从PyPI获取最新版本。
  • --clean:在生成 requirements.txt 之前,清理现有的文件。
  • --append:将依赖项追加到现有的 requirements.txt 文件中,而不是覆盖它。
  • --python-version-V:指定Python版本,用于检查兼容性。
  • --packages-P:指定要包含在 requirements.txt 中的包列表,可以是逗号分隔的字符串。
  • --ignore:指定要忽略的包列表,这些包将不会出现在生成的 requirements.txt 中。
  • --encoding:指定输出文件的编码格式,默认为UTF-8。
  • --check:检查现有的 requirements.txt 文件,报告缺失的依赖项。
  • --case-insensitive:启用大小写不敏感的包名匹配。

使用 pipreqs 的基本命令格式如下:

bash 复制代码
pipreqs [options] <directory>

其中 <directory> 是你想要分析的项目目录的路径。例如:

bash 复制代码
pipreqs /path/to/your/project

这将扫描指定目录,并生成一个 requirements.txt 文件,列出项目中使用的所有依赖项。

首先,需要安装pipreqs:

复制代码
pip install pipreqs

然后,在项目根目录下运行:

复制代码
pipreqs . --encoding=utf8 --force

--encoding=utf8参数确保正确处理非ASCII字符

--force参数覆盖已存在的requirements.txt文件

这将在当前目录下生成一个requirements.txt文件,其中只包含你的代码实际导入使用的包。

可能遇到的问题

问题一:

复制代码
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\Scripts\pipreqs.exe\__main__.py", line 7, in <module>
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\pipreqs\pipreqs.py", line 609, in main
    init(args)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\pipreqs\pipreqs.py", line 572, in init
    imports = local + get_imports_info(difference, proxy=proxy, pypi_server=pypi_server)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\pipreqs\pipreqs.py", line 238, in get_imports_info
    response = requests.get("{0}{1}/json".format(pypi_server, item), proxies=proxy)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\adapters.py", line 682, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))

这个错误信息显示了在使用 pipreqs 时遇到了网络连接问题。

具体来说,requests.exceptions.ConnectionError 表明请求因为某种网络问题而被中断。

ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。') 是一个更具体的错误,指出连接被远程主机强制关闭。

临时绕过这个问题,可以尝试使用 --use-local 参数,这样 pipreqs 将使用本地环境中的包版本,而不是尝试从远程服务器获取信息:

复制代码
pipreqs --use-local

请注意,这将生成一个包含本地项目中使用的包版本的 requirements.txt 文件,而不会检查远程PyPI服务器上的可用版本。

也可以尝试更新 pipreqs 和 requests

要更新 pipreqsrequests 这两个Python包,你可以使用 pip,这是Python的包安装器。以下是更新这两个包的步骤:

  1. 打开命令行界面(在Windows上是命令提示符或PowerShell,在macOS或Linux上是终端)。

  2. 首先,确保 pip 是最新版本。可以使用以下命令来升级 pip

    bash 复制代码
    python -m pip install --upgrade pip
  3. 然后,使用以下命令来更新 requests

    bash 复制代码
    pip install --upgrade requests
  4. 接下来,更新 pipreqs

    bash 复制代码
    pip install --upgrade pipreqs

这些命令将会查找最新版本的 requestspipreqs 并安装它们。如果你使用的是虚拟环境,确保你已经激活了相应的环境再执行上述命令。

如果你想要确保安装的是特定版本的包,也可以指定版本号,例如:

bash 复制代码
pip install requests==2.25.1
pip install pipreqs==0.4.10

请将版本号替换为你想安装的版本。

另外,如果你使用的是Python 3,并且系统中同时安装了Python 2,可能需要使用 pip3 来代替 pip 命令。

更新完成后,你可以使用以下命令来检查安装的包版本,确保它们已经被更新:

bash 复制代码
pip show requests
pip show pipreqs

这些命令将显示每个包的版本信息和其他元数据。如果更新过程中遇到任何问题,可能需要检查网络连接或查看错误信息来进一步诊断问题。

问题二:

复制代码
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\Scripts\pipreqs.exe\__main__.py", line 7, in <module>
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\pipreqs\pipreqs.py", line 609, in main
    init(args)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\pipreqs\pipreqs.py", line 572, in init
    imports = local + get_imports_info(difference, proxy=proxy, pypi_server=pypi_server)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\pipreqs\pipreqs.py", line 238, in get_imports_info
    response = requests.get("{0}{1}/json".format(pypi_server, item), proxies=proxy)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\huawei4\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\adapters.py", line 700, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /pypi/PySide2/json (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000022551C7F2E0>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积 极拒绝,无法连接。'))

这个错误信息显示了在使用 pipreqs 时遇到了一个 ConnectionError,这表明尝试连接到 pypi.python.org 时连接请求被远程主机拒绝了。

未能解决。。。。

相关推荐
(・Д・)ノ14 分钟前
python打卡day27
开发语言·python
小oo呆1 小时前
【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核
python·jupyter·conda
小白学大数据2 小时前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街2 小时前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋67892 小时前
用Python绘制梦幻星空
开发语言·python·pygame
alpszero2 小时前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11
白云千载尽3 小时前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros
咕噜咕噜啦啦3 小时前
python爬虫实战训练
爬虫·python
盛夏绽放3 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2613 小时前
Python训练营打卡DAY27
开发语言·python·机器学习