Mar*_*cin 7 python python-3.x requirements.txt
我有一个包含所有已安装软件包的需求文件。在项目的大规模重构过程之后,不再需要列出的一些包。问题是我不确定是哪一个。有没有办法确定requirements.txt文件中列出的哪些包在代码中实际使用?
使用 Python 库的替代答案:pipreqs. 请参阅自动创建requirements.txt。
使用默认参数运行 pipreqs 将为requirements.txt您生成一个。
$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt
Run Code Online (Sandbox Code Playgroud)
但是,您似乎正在尝试清理旧requirements.txt文件。在这种情况下,pipreqs还带有一个--diff标志,还有一个--clean标志。来自文档:
--diff <file> Compare modules in requirements.txt to project imports.
--clean <file> Clean up requirements.txt by removing modules that are not imported in project.
Run Code Online (Sandbox Code Playgroud)
您可以使用它--diff来确定需要删除哪些库,并--clean自动执行此操作。
如果您使用的是虚拟环境并且有一个足够好的测试套件,您可以重复自动运行(最好可以通过脚本或简单命令在本地工作区上运行它),那么暴力类型的方法是:
git clone到单独的文件夹中)pip freeze > requirements.new.txt中的任何其他方式 )例如,我们有这个(非常)最小的示例代码:
# --- APP CODE
from numpy import array
from openpyxl import Workbook
from pydantic import BaseModel, ValidationError
class MyModel(BaseModel):
x: int
# --- TEST CODE
import pytest
def test_my_model():
with pytest.raises(ValidationError):
MyModel(x="not an int")
Run Code Online (Sandbox Code Playgroud)
克隆它并设置一个全新的虚拟环境(但尚未安装任何软件包)后,第一次尝试运行测试会产生:
# --- APP CODE
from numpy import array
from openpyxl import Workbook
from pydantic import BaseModel, ValidationError
class MyModel(BaseModel):
x: int
# --- TEST CODE
import pytest
def test_my_model():
with pytest.raises(ValidationError):
MyModel(x="not an int")
Run Code Online (Sandbox Code Playgroud)
那么,你安装pytest。
然后,你得到:
(my_venv) $ pytest --maxfail=1 main.py
bash: /Users/me/.venvs/my-proj-7_w3b8eb/bin/pytest: No such file or directory
Run Code Online (Sandbox Code Playgroud)
然后你安装numpy。
然后,你得到:
(my_venv) $ pytest --maxfail=1 main.py
...
main.py:1: in <module>
from numpy import array
E ModuleNotFoundError: No module named 'numpy'
Run Code Online (Sandbox Code Playgroud)
然后你安装openpyxl。
...等等。直到所有测试通过。当然,即使您的自动化测试通过了,最好也进行一些手动基本测试,以确保一切确实像以前一样工作。最后,生成 requests.txt 文件的新副本,并将其与旧副本进行比较,以检查是否存在任何差异。
当然,正如我在开始时提到的,这假设您有一个足够好的测试套件来测试大部分代码和用例。(这也是您应该首先编写测试的充分理由之一。)。
| 归档时间: |
|
| 查看次数: |
5924 次 |
| 最近记录: |