如何在没有所有软件包版本的情况下创建require.txt

时间:2020-01-22 07:13:31

标签: python pip virtualenv

现在我的requirement.txt包含以下软件包列表:

asgiref==3.2.3
beautifulsoup4==4.8.2
certifi==2019.11.28
chardet==3.0.4
Click==7.0
Django==3.0.2
idna==2.8
pytz==2019.3
requests==2.22.0
six==1.14.0
soupsieve==1.9.5
sqlparse==0.3.0
urllib3==1.25.7

我只想要软件包名称,以便pip3始终安装最新版本。

5 个答案:

答案 0 :(得分:2)

请考虑一下,如果您几个月前已经用Django 2.x编写了应用程序,而Django中只是列出了requirements.txt作为依赖项。现在Django 3已经发布,现在安装它会导致主要版本从Django 2跳到3,并且可能破坏您的应用一半。而这只是您的依赖项中的一个。

否,版本是有目的的。升级版本应该是一项有意识的工作,包括进行测试以确认兼容性。您希望以良好状态而不是随机不可预测的状态运行软件。版本兼容性不容小under。 pip可以给您list of all outdated dependencies easily,升级它们只是另一个命令。

轶事时间:openpyxl最近包含一个bug in version 3.0.1,它破坏了我们应用程序中的一项重要功能。您知道为什么我们不会受此影响吗?因为我们的requirements.txt使用的是固定版本,所以我通过在手动升级依赖项时运行单元测试来发现问题,并因此选择 not 升级openpyxl。如果没有固定版本,则我们的应用可能已经损坏了几周,而最新版本是openpyxl 3.0.1。

答案 1 :(得分:1)

您可以使用python本身来解析requirements.txt文件,并获取您的包名称,并按如下所示进行手动拆分:

with open("requirements.txt") as myFile:
  pkgs = myFile.read()
  pkgs = pkgs.splitlines()

  for pkg in pkgs:
      print(pkg.split('==')[0])

这将为您提供如下信息:

enter image description here

答案 2 :(得分:1)

您也可以查看此question。从这个问题中,我得出了我认为可以解决您的问题的答案之一。它不会删除软件包的版本,但是只要您安装requiremwnts.txt,它就会将软件包升级到最新版本。

pip install pip-upgrader

激活您的virtualenv(这一点很重要,因为它还将在当前virtualenv中安装新版本的升级软件包)。

cd进入您的项目目录,然后运行:

pip-upgrade

如果需求位于非标准位置,请将其作为参数发送:

pip-upgrade path/to/requirements.txt

如果您已经知道要升级的软件包,只需将它们作为参数发送:

pip-upgrade -p django -p celery -p dateutil

答案 3 :(得分:0)

把你的requirements.txt改成这个(不指定版本,这样pip会安装最新版本)

asgiref
beautifulsoup4
certifi
chardet
Click
Django
idna
pytz
requests
six
soupsieve
sqlparse
urllib3

答案 4 :(得分:0)

您需要更改 requirement.txt 文件以删除所有版本依赖项。您可以为此解析文件。或者使用正则表达式。

==\w+.+.+

这将选择符号 == 之后的所有元素,包括符号。

用空字符串替换。

在支持正则表达式的编辑器中打开requirements.txt(例如vs code)。

然后使用查找和替换。 (vs 代码中的 ctrl + f)

选择正则表达式选项。 (在 vs 代码中的查找和替换上下文菜单中点击 .*

在查找中放置 ==\w+.+.+ 在替换什么都不放。 (留空)

然后全部替换。

那么 pip install requirements.txt 就可以开始了。