我有一个requirements.txt如下
boxsdk
boxsdk[jwt]
如果我运行
pip install -r requirements.txt
,则仅安装boxsdk
,而不安装boxsdk[jwt]
# cat requirements.txt
boxsdk
boxsdk[jwt]
# pip -q install -r requirements.txt
# python -c "import boxsdk.auth.jwt_auth"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python3.7/site-packages/boxsdk/auth/jwt_auth.py", line 10, in <module>
from cryptography.hazmat.backends import default_backend
ModuleNotFoundError: No module named 'cryptography'
但是,如果我删除第一行,以便在
boxsdk[jwt]
中仅列出requirements.txt
,它将正确安装# cat requirements.txt
boxsdk[jwt]
# pip -q install -r requirements.txt
# python -c "import boxsdk.auth.jwt_auth"
#
完整的点子输出可以在这里看到:https://gist.github.com/davidkazuhiro/989328734e128628dd53ccab741f3e45
为什么在前一种情况下
boxsdk[jwt]
被跳过? 最佳答案
您的requirements.txt
等效于以下命令
pip install boxsdk boxsdk[jwt]
所以我的答案将基于上述命令。
根据What do square brackets mean in pip install?,
boxsdk[jwt]
指定boxsdk
包的变体。因为首先指定了
boxsdk
,所以当遍历boxsdk[jwt]
时,pip会注意到已经在命令行(或一个相同的boxsdk
)中指定了requirements.txt
,并且无提示地忽略了重复的软件包规范。另一方面,此命令成功安装了所有内容:
pip install boxsdk[jwt] boxsdk
因此,您应该在
jwt
中将带有requirements.txt
的一个放在另一个之前:boxsdk[jwt]
boxsdk
这样,pip将忽略后者,并根据需要进行安装。
但是执行此操作的正确方法是只丢弃另一个,使
boxsdk[jwt]
成为requirements.txt
中的唯一内容。关于python - 为什么pip跳过了requirements.txt中的括号包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54500630/