防止特定的 "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的pull-request以及他的观点。我可能并不完全同意他们,但我尊重每个人的pull-request。
尽管如此,在尝试安装期间可能会显示一些额外的消息。你知道的……这只是为了好玩。
如果您对先前版本的此包中包含的hack感兴趣,请参阅此项目的仓库中的contested-sense-of-humour分支或end-of-fun标签。
项目详情
requirements-tests-1.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e8ffe60114f0431bd82f72e4f0f41f9b93ed5f07cef39176dce46e888a3e288e |
|
MD5 | 8a0388bd991137a4e331458d6e845bef |
|
BLAKE2b-256 | 5ae6dfac64287b4d56eefdf9f2c1e9ab86a0b3d998475ae79bbc3a3da2873270 |