我正在尝试集成pipenv到我的新项目中,因为我只需要一些用于开发的依赖项,而我找不到一种简单的方法来使用pip或venv.
但是,我在尝试时遇到了一个问题:
我的项目取决于它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只复制了它)。
或者,有没有更好的方法来管理我的依赖项?我需要能够指定不会安装在生产环境中的开发依赖项,并且我需要能够指定特定于平台的依赖项。pip与requirements.txt无法处理的第一个请求,据我所知,这就是为什么我尝试切换到pipenv。
我尝试查找它但没有成功。任何帮助,将不胜感激。
小智 6
在 pipfile 中显式添加特定于平台的pypiwin32和软件包安装应该可以解决该问题。pywin32
pypiwin32 = {version = "*", sys_platform = "== 'win32'"}
pywin32 = {version = "*", sys_platform = "== 'win32'"}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Linux 上的先决条件包pywin32也将被忽略。
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |