提问者:小点点

PipEnv:如何处理本地安装的。whl包装


我正在使用PipEnv来设置一个项目,以及一些需要从预编译的二进制文件中安装的包。在之前的一个项目中,我只是pipenv将. whl文件从一些本地文件夹安装到我的环境中,但这似乎会导致锁定文件的问题,如果其他人试图从存储库安装,则会抛出错误,因为pipenv跟踪本地路径。这方面的最佳实践是什么?我应该创建一个包存储库作为项目的一部分并从那里安装吗?


共1个答案

匿名用户

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

设置一个私有的PyPI服务器对于一个项目来说是微不足道的,比如:

$ mkdir private_pypi && cd private_pypi
$ pipenv install   # create pipenv files
$ pipenv install pypiserver
$ mkdir packages
$ pipenv run pypi-server -p 8080 ./packages &

并将控制盘放入packages目录的projectname子目录,或使用twine将包发布到服务器。

然后添加一个[[Source]]部分在您的项目Pipfile指向服务器(要使用的url结束于/alone,因此超文本传输协议://host name: 8080/san):

[[source]]
url = "http://hostname:8080/simple"
verify_ssl = false
name = "some_logical_name"

您可以使用默认的name=“pypi”部分作为指南。

[包]部分中,指定要用于那些私有轮子的索引:

[packages]
wheel1 = {version="*", index="some_logical_name"}
wheel2 = {version="0.41.1", index="some_logical_name"}
some_public_project = "*"

同样,您可以显式地命名任何已命名的索引,包括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

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