防范特定的 "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,并使用几个PyPI不允许的流行名称。
requirements-dev.txt
requirements-dev
requirements-test.txt
requirements-test
这曾经发生过吗?
是的。在PyPI上不时会发生域名抢注。这个项目就是最好的例子。previous版本的requirements.txt实际上做了更多,不仅仅是中断安装。它提供了一个专门定制的setup.py脚本,它可以……
在您的文件系统中查找您打算安装的需求文件
在另一个pip子进程中安装所有包
显示类似于正常安装过程的输出
pip的新版本完全吞没了包安装脚本的输出,但这种行为可以通过以下方式轻松规避 - 至少在OS X和Linux上如此。此外,运行时版本切换(到0.0.0)允许重复安装此包,因为PyPI上总是有更新的版本。如果出现问题(尤其是在Windows上),则会导致加密和粗鲁的错误消息。
没有危害。实际上有时很有用。至少在我的个人观点中是这样。无论如何,我的一些人质疑了我的可用性和幽默感[1]。这就是为什么requirements.txt将不再安装其他包,并且总是以错误代码退出安装。这主要归功于@aanand的pull-request[2],以及他的观点。我可能不同意所有这些观点,但我尊重人们的PR。
尽管如此,在安装尝试期间可能会显示一些附加消息。你知道……这是为了好玩。
如果您对之前版本中包含的破解感兴趣,请参阅此项目的contested-sense-of-humour分支或end-of-fun标签[3]。
项目详情
requirements-dev-1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ae8450e62a7505a35f5c7aea835c56f23a6fbe76063223f837131d2efb46584e |
|
MD5 | f232f2ef4824380cdfaeb195d15c7d00 |
|
BLAKE2b-256 | 0b620409bde03bca0702810bd4e983219856244c77095f42a19f68a268d8f22b |