PipEnv:如何处理本地安装的.whl程序包

Bre*_*dan 2 python pipenv

我正在使用PipEnv设置项目,并且需要从预编译的二进制文件中安装一些软件包。在上一个项目中,我只是通过Pipenv将.whl文件从某个本地文件夹安装到我的环境中,但这似乎会导致锁定文件出现问题,如果其他人试图从存储库安装该文件,则该文件会出错,因为pipfile会跟踪本地路径。最佳做法是什么?我是否应该在项目中创建一个软件包存储库并从中进行安装?

Mar*_*ers 6

您应该设置一个私有的PyPI索引服务器,并将Pipenv配置为使用该服务器

对于像这样的项目,设置私有PyPI服务器很简单pypiserver

$ mkdir private_pypi && cd mkdir private_pypi
$ pipenv install   # create pipenv files
$ pipenv install pypiserver
$ mkdir packages
$ pipenv run pypi-server -p 8080 ./packages &
Run Code Online (Sandbox Code Playgroud)

并将其放入目录的projectname子目录中packages,或用于twine将软件包发布到服务器。

然后[[source]]在您的项目中添加一个部分Pipfile以指向服务器(要使用的url以结尾/simple,所以http://hostname:8080/simple):

[[source]]
url = "http://hostname:8080/simple"
verify_ssl = false
name = "some_logical_name"
Run Code Online (Sandbox Code Playgroud)

您可以使用默认name = "pypi"部分作为指导。

在该[packages]部分中,指定用于这些专用车轮的索引:

[packages]
wheel1 = {version="*", index="some_logical_name"}
wheel2 = {version="0.41.1", index="some_logical_name"}
some_public_project = "*"
Run Code Online (Sandbox Code Playgroud)

同样,您可以显式命名任何命名索引,包括index="pypi"。如果不添加index="..."限制,则Pipenv可以在所有索引中搜索可能的分布。

对于在索引之外发布的二进制车轮(例如Christoph Gohlke构建的二进制车轮),您可以考虑只安装完整的车轮URL:

pipenv install https://download.lfd.uci.edu/pythonlibs/l8ulg3xw/aiohttp-3.3.2-cp36-cp36m-win_amd64.whl
Run Code Online (Sandbox Code Playgroud)

这确实迫使每个使用您的Pipfile的人进入特定平台。