Pipenv:无条件安装平台特定包的依赖项?

Sha*_*Avr 6 python pipenv

我正在尝试集成pipenv到我的新项目中,因为我只需要一些用于开发的依赖项,而我找不到一种简单的方法来使用pipvenv.

但是,我在尝试时遇到了一个问题:

我的项目取决于它pypiwin32何时在 Windows 中使用。因为它是 Windows 依赖项,所以我使用以下命令安装了它:

pipenv install "pypiwin32 ; platform_system == 'Windows'"

它成功地将此依赖项添加到我Pipfile的平台限制中:

# Pipfile

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]
# dependencies...

[packages]
# dependencies...
pypiwin32 = {markers = "platform_system == 'Windows'",version = "*"}

[requires]
python_version = "3.7"
Run Code Online (Sandbox Code Playgroud)

问题是这pypiwin32取决于pywin32包,当我查看Pipfile.lock文件时,我发现它不仅限于 Windows:

# Pipfile.lock

"pypiwin32": {
    "index": "pypi",
    "markers": "platform_system == 'Windows'",
    "version": "==223"
},
"pywin32": {
    "version": "==224"
},
Run Code Online (Sandbox Code Playgroud)

这很奇怪。我通过改变限制'Linux的,并试图安装依赖到一个新的环境,而测试它Pipfile.lock,它忽略了pypiwin32预期,但安装pywin32尽管它不是在上市无论如何Pipfile,它是一个包的依赖性,其被忽略了。

这是一个严重的问题,因为如果我决定在 linux 机器上部署或开发,它根本无法工作,因为pywin32在 linux 或 mac 上不可用(据我所知)。

有没有办法用包的限制正确标记包的依赖关系?

我不想手动编辑Pipfile.lock(我也不认为它会起作用,因为当我尝试将它安装到新环境中时,我Pipfile只复制了它)。

或者,有没有更好的方法来管理我的依赖项?我需要能够指定不会安装在生产环境中的开发依赖项,并且我需要能够指定特定于平台的依赖项。piprequirements.txt无法处理的第一个请求,据我所知,这就是为什么我尝试切换到pipenv

我尝试查找它但没有成功。任何帮助,将不胜感激。

小智 6

在 pipfile 中显式添加特定于平台的pypiwin32和软件包安装应该可以解决该问题。pywin32

pypiwin32 = {version = "*", sys_platform = "== 'win32'"}
pywin32 = {version = "*", sys_platform = "== 'win32'"}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Linux 上的先决条件包pywin32也将被忽略。