防范特定的 "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上偶尔会发生域名抢注。这个项目就是最好的例子。以前版本的 requirements.txt 实际上不仅仅是中断安装。它提供了一个特殊的 setup.py 脚本,该脚本可以
查看您的文件系统以找到您想要安装的要求文件
在另一个pip子进程中安装所有包
显示模拟正常安装过程的输出
pip的新版本完全吞没了包安装脚本的输出,但这个行为在OS X和Linux上可以很容易地绕过。此外,运行时版本切换(到0.0.0)允许重复安装此包,因为PyPI上总是有更新的版本。如果出现问题(尤其是在Windows上),会导致加密和粗鲁的错误信息。
没有危害。实际上有时很有用。至少在我个人看来是这样。无论如何,我的可用性和幽默感被一些人质疑。这就是为什么requirements.txt将不再安装其他包,并且在安装过程中总是以错误代码退出。这主要归功于@aanand的拉取请求和他的观点。我可能不同意他们中的所有观点,但我尊重人们的PR。
尽管如此,在尝试安装时可能会显示一些附加信息。你知道……这是为了好玩。
如果你对先前版本中包含的漏洞感兴趣,请参阅此项目的仓库中的contested-sense-of-humour分支或end-of-fun标签。
项目详情
requirements-dev.txt-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8d27bf5ca8e3c4c0284a0c96a68f4ca3f22a2ae96a15e583b4ad1fc266c49d0d |
|
MD5 | 2adc5bf1f9a6eb790493dfeccd9ff66f |
|
BLAKE2b-256 | 5f4965899d01eff77ae3c4b1fcb84b3132d1ce95db6fc5b99a14d28c433dab08 |