防范特定的 "pip install" 错误
项目描述
requirements.txt
这是在运行 pip install -r requirements-dev.txt 时防止打字错误的保障。如果您不小心省略了 -r,此包将导致您的安装中断。
$ pip install requirements-dev.txt Collecting requirements-dev.txt Installing collected packages: requirements-dev.txt Running setup.py install for requirements-dev.txt ... error Complete output from command: running install It looks like you meant to type `pip install -r requirements-dev.txt`, but you left out the `-r` by accident. Aborting installation.
为什么?
如果我们没有在PyPI上这样的包,您可能会意外地安装了一个与您的需求文件同名的包。恶意用户可以注册一个会模仿正常安装过程并执行任意代码的包。
PyPI(幸运的是)不允许 requirements.txt 作为包名,所以这种情况已经得到处理。所有在PyPI源代码中硬编码为禁止的包名包括
requirements.txt
rrequirements.txt
requirements-txt
rrequirements-txt
但它显然没有涵盖所有常见情况。这就是为什么这些源代码以PyPI上几个不受禁止的常见名称分发
requirements-dev.txt
requirements-dev
requirements-test.txt
requirements-test
这种情况发生过吗?
是的。PyPI上时不时会发生 typo squatting(错别字抢注)。这个项目就是最好的例子。之前的 requirements.txt 版本实际上不仅仅是中止安装,它还提供了一个特别定制的 setup.py 脚本,该脚本可以
在你的文件系统中查找你打算安装的要求文件
在另一个 pip 子进程中安装所有包
显示模仿正常安装过程的输出
pip 的新版本完全吞没了包安装脚本的输出,但这种行为很容易绕过——至少在 OS X 和 Linux 上是这样。另外,运行时版本切换(到 0.0.0)允许反复安装这个包,因为 PyPI 上总有新版本可用。如果出现问题(尤其是在 Windows 上),则会导致加密和粗鲁的错误信息。
没有造成危害。实际上有时很有用。至少我个人这么认为。无论如何,我的可用性和幽默感 被一些人质疑。这就是为什么 requirements.txt 将不再安装其他包,并且在安装期间始终以错误代码退出。这主要归功于 @aanand 的 pull-request 以及 他的观点。我可能不同意他们中的所有观点,但我尊重人们的 pull-request。
尽管如此,在安装尝试期间可能会显示一些额外的消息。你知道……这是为了好玩。
如果你对这个包之前的版本中包含的技巧感兴趣,请参阅这个项目的 仓库 中的 contested-sense-of-humour 分支或 end-of-fun 标签。
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源代码分发
requirements-test.txt-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b0005951aca53060f2fe8508d9f0d11c1245a4eb7fe5d3aba5f49c9dcb10b561 |
|
MD5 | ec467f0c2239c6d42f671d856b625695 |
|
BLAKE2b-256 | 9a59abe127ffef166709f1a72e2ca786c96ce9d3043f9df14d4c67fc68f3db2c |