我想安装一个我从第三方获得的Python轮(Numpy带有为Windows 64预编译的MKL扩展)。我在Artifactory上重新托管了这个软件包(把它看作是在防火墙后面工作的PyPi的私有企业版)。我希望用户能够像其他任何软件包那样只是按顺序安装这些软件包。
当然,简单的解决方法是手动下载文件然后pip安装它,但这不是很令人满意,因为这意味着我们必须将这些包视为特殊情况。我不能使用Python的正常依赖管理过程。
另一个明显的解决方法是在上传之前重命名文件:我可以删除空间。这样可行,但是下次有人想要升级这些软件包时会出现额外的手动步骤。
问题是虽然Pip实用程序可以看到版本中带有空格的文件,但似乎无法实际请求这些文件:
当pip列出可用版本时,它可以看到“1.12.1 mkl”,即“mkl”之前的空格。不幸的是,在需求规范中似乎不允许使用空格字符:
> pip install numpy==1.13.0rc2+mkl
Collecting numpy==1.13.0rc2+mkl
Could not find a version that satisfies the requirement numpy==1.13.0rc2+mkl (from versions: 1.12.1 mkl, 1.13.0rc2 mkl, 1.3.0, 1.4.1, 1.5.0, 1.5.1, 1.6.0, 1.6.1, 1.6.2, 1.7.0, 1.7.1, 1.7.2, 1.8.0, 1.8.1, 1.8.2, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.10.0.post2, 1.10.1, 1.10.2, 1.10.4, 1.11.0b3, 1.11.0rc1, 1.11.0rc2, 1.11.0, 1.11.1rc1, 1.11.1, 1.11.2rc1, 1.11.2, 1.11.3, 1.12.0b1, 1.12.0rc1, 1.12.0rc2, 1.12.0, 1.12.1rc1, 1.12.1, 1.13.0rc1, 1.13.0rc2)
No matching distribution found for numpy==1.13.0rc2+mkl
^^在这里向右滚动--->
这显然不是正确的方法:
> pip install numpy=='1.13.0rc2 mkl'
Invalid requirement: 'numpy=='1.13.0rc2'
Traceback (most recent call last):
File "c:\apps\venv_demo\lib\site-packages\pip\req\req_install.py", line 77, in __init__
req = pkg_resources.Requirement.parse(req)
File "c:\apps\venv_demo\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 3036, in parse
req, = parse_requirements(s)
File "c:\apps\venv_demo\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2980, in parse_requirements
"version spec")
File "c:\apps\venv_demo\lib\site-packages\pip\_vendor\pkg_resources\__init__.py", line 2945, in scan_list
raise RequirementParseError(msg, line, "at", line[p:])
pip._vendor.pkg_resources.RequirementParseError: Expected version spec in numpy=='1.13.0rc2 at =='1.13.0rc2
也不是以下任何一种:
pip install numpy==1.13.0rc2_mkl
pip install numpy==1.13.0rc2-mkl
pip install numpy==1.13.0rc2\ mkl
该工件实际上是从代理PyPi的Artifactory提供的,因此没有或不能有编译器的机器可以下载numpy Wheel的特定二进制版本。可安装文件的路径实际上是:
那么在Pip中有没有办法指定一个在工件版本号中有空格的工件?