Pipenv: 锁更新很慢

创建于 2018-04-05  ·  47评论  ·  资料来源: pypa/pipenv

更新锁定文件可能非常慢。 标准的pipenv lock对我来说很容易花费一分钟多的时间:

$ time pipenv lock 
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (abef76)!

real    1m56.988s
user    0m21.805s
sys 0m2.417s

这意味着每次我需要安装、卸载或升级软件包时,我都需要休息 2 分钟以等待 pipenv 完成其锁定文件的更新。 我不确定为什么会这样; yarn 和 npm 似乎执行类似的任务,但只需要几秒钟,即使对于具有更多依赖项的项目也是如此。

最有用的评论

在等待 pipfile 锁定时阅读此内容...:) 如果有解决方案,那就太好了。

所有47条评论

我们知道并在跟踪此主题时遇到了许多问题。 见 #1785 #1886 #1891 和 PR #1896

npm 和 yarn 的优点是不必完全下载并执行每个预期的包来确定它们的依赖关系图,因为依赖关系是以明文形式指定的。 Python 依赖需要我们完全下载并执行每个包的安装文件来解析和计算。 这就是现实,它有点慢。 如果您等不及 2 分钟,或者您觉得不值得折衷,您可以随时通过--skip-lock

关闭跟踪其他问题。

同样在这里,我现在正在尝试,安装 django 已经 10 分钟了

似乎如果你尝试一次安装几个它会很慢但如果你一次安装一个会更快

如果您可以提供一个重现缓慢行为的 Pipfile,那将很有帮助-谢谢

Python 依赖需要我们完全下载并执行每个包的安装文件来解析和计算

当包有自己的Pipfile.lock ,情况是否仍然如此,或者 pipenv 会在可能的情况下使用它来确定依赖关系?

pipenv 会在可能的情况下使用它来确定依赖关系吗?

不可以。 Pipenv 是一个应用程序依赖解析工具。 当一个依赖项被另一个应用程序用作 Python 包时,它就不再是一个应用程序。 它的依赖项由 setup.py(或 setup.cfg 或您用来上传到 PyPI 的任何内容)确定。 从锁定文件加载依赖项是通往依赖地狱的必经之路,我们可能永远不会这样做。

还是超级慢

@iddan感谢您的提醒,Obvious 船长!

抱歉,作为 OSS 维护者,我知道有时问题会因年龄而被忽略。 只是想说明即使这个问题得到了讨论,它仍然是相关的

@techalchemy 上面--skip-lock注释很棒。 这应该是一个更易于访问或公开的选项。 我们可以在某处将其设置为默认值吗?

@techalchemy如果我的全新 mac pro 需要 20 分钟怎么办?

@techalchemy 上面--skip-lock注释很棒。 这应该是一个更易于访问或公开的选项。 我们可以在某处将其设置为默认值吗?

据我所知,pipenv 的压倒性好处是保证依赖关系可以很好地协同工作——不仅对你来说,而且对以后处理你的代码的任何人来说都是如此。 该保证的产物,锁定文件,绝对比任何人预期或期望的时间都要多,_包括开发人员_-参见#2200。

但是,我认为您也可以理解 pipenv 有机会在整个 Python 社区中引导善意的开发人员朝着减少对未来贡献者的头疼的工作流程施加影响——如果他们在“弄清楚如何设置开发环境”阶段; 并且更少被未来的维护者举手——如果他们在“严重搞砸了深入的项目内部”阶段就放弃了,他们可能只是被公关作者所驱使。

如果--skip-lock成为 Pipfile 中的永久标志或 pipenv 配置中的设置,pipenv 的看法将慢慢滑向“更好的 pip”,而随着社区最终登陆,它只是另一个踏脚石逐渐消失在地平线上一个不那么妥协的精神继承者。

最好将它仅作为 env var 或其他一些方法可用,其应用程序直接位于 _“您的用户特定的本地配置,您的错”_ 领域,允许 pipenv 克服锁定文件生成缓慢的传递阶段而不会放弃在包管理中真正有益的文化转变为_显性而不是隐性_。

Python 令人难以置信的庞大标准库是一笔巨大的资产,其历史经历了许多强加一致性的时代。 大多数标准软件包可以很好地协同工作,这是一项巨大的壮举,涉及许多人多年来的考虑。 有一天,这种友好的能力将扩展到网络上遇到的大多数 Python 项目——与标准库相去甚远,所需的 PEP 也少得多(_以及在挫折中空出的 BDFL 少得多_)。 这种单方面的黄油体验的影响很难衡量,但一些当前的语言_确实_拒绝为了立即的方便而妥协概念完整性......哦,他们会的地方。

所以_是的_,生成锁文件很慢,_是的_,当您只想要pip install --save时,这令人沮丧。 但这只是因为我们多年来一直在将一头大象扫进壁橱——相信我们没有来自外部依赖的一堆乱七八糟的期望和意图,因为_“它在我的机器上安装得很好”_。

锁定文件生成速度慢_仅_因为它明确了我们都认为理所当然的事情。 但是_因为_它很痛,我们会调整一些东西,所以它不会。 我们摔断了手臂,因为我们强迫自己做我们相信的事情。当然,我们可以通过不再使用那只手臂来避免疼痛——或者我们可以在它愈合时将它放入石膏中。

我是最后一个告诉你今天不要让 pipenv 对你自己方便的人(否则我会成为一个糟糕的开发者——_虽然,陪审团仍然没有_),但我恳求你看到锁文件生成的挫败感痛苦,而 Python 社区发展成为一个强壮、健康的身体,拥有比移除石膏时真正预期的更完整的四肢。 我们进入了 Python 3。让我们进入 stdlib 中的依赖管理。

这在我的机器上花了 38 分钟来创建锁定文件。 运行 Windows 10 并使用 Python 3.7

只安装了 numpy 和枕头,安装 numba 需要 <1 秒,锁定它需要 25 分钟。 pipenv 是否强制编译锁定的每个库或者这是如何工作的?

仅供参考,持久跳过锁定只是在等待有人为auto_envvar_prefix拨动开关,这是一个点击设置。 我一直 100% 专注于核心功能,所以我还没有机会看到这个,但我怀疑这并不难

TLDR; 典型的pipenv install调用:时间:144.82 真实 33.68 用户 5.77 系统。 使用--skip-lock时间:4.54 真实 5.33 用户 0.87 系统。

Pandas-datareader 安装在第一次尝试时失败,可能是lock挂起的原因。 这是其他人在其他软件包中看到的问题吗?

使用版本 2018.11.26

$ pipenv --version
pipenv, version 2018.11.26

requirements.txt

sklearn
pandas
numpy
matplotlib
statsmodels

典型的pipenv install调用。 使用time (BSD) 定时执行。

结果:144.82 真实 33.68 用户 5.77 系统

$ time pipenv install -r requirements.txt
Requirements file provided! Importing into Pipfile…
Pipfile.lock (0fdb67) out of date, updating to (a65489)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
✔ Success!
Updated Pipfile.lock (0fdb67)!
Installing dependencies from Pipfile.lock (0fdb67)…
  🎅   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 15/15 — 00:00:04
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
      144.82 real        33.68 user         5.77 sys

调用 w\ --skip-lock

结果:4.54 真实 5.33 用户 0.87 系统

$ time pipenv install -r requirements.txt --skip-lock
Requirements file provided! Importing into Pipfile…
Installing dependencies from Pipfile…
  🎅   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 6/6 — 00:00:01
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
        4.54 real         5.33 user         0.87 sys

我认为https://github.com/pandas-dev/pandas/可能有问题? 这对我来说也是时间的共同点。

虽然pytest也可能是一个问题:\

它甚至不会在我的机器上完成:

Installing pandas…
Adding pandas to Pipfile's [packages]…
Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Traceback (most recent call last):
  File "c:\python36\lib\site-packages\pipenv\vendor\pexpect\expect.py", line 109, in expect_loop
    return self.timeout()
  File "c:\python36\lib\site-packages\pipenv\vendor\pexpect\expect.py", line 82, in timeout
    raise TIMEOUT(msg)
pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x00000292ADCCCDD8>
searcher: searcher_re:
    0: re.compile('\n')

@black-snow 我建议在不同的外壳中尝试它。 如果没有深入研究,似乎 pexpect(一个用于与交互式 CLI 程序进行编程接口的库)用于检测正在执行的 shell pipenv,这可能会停止。 pexpect 对于这样的事情似乎有点矫枉过正,但我​​不知道整个背景。

@theY4Kman感谢您的建议。 pipenv 在另一台具有相同 ubuntu 和 bash 版本的电脑上工作正常......

在等待 pipfile 锁定时阅读此内容...:) 如果有解决方案,那就太好了。

似乎我们需要某种 API 来解析和缓存 Python 包 deps 并以机器友好的格式分发它。 所以我们将不再需要下载整个包并解析它们。

我相信 bundler 和 ruby​​ gems 会维护和使用类似的东西。

Java 还具有 POM 文件 (XML),其中包含包依赖项和有关包的其他信息。 它们与编译的 JAR 分开上传。

每个较新的包管理器都有一些单独的元文件(npm/yarn、composer、gradle/maven、cargo、ruby gems/bundler,...)。

你可以从 PyPi 获取依赖信息,而无需下载整个包(参见 PEP 566,它取代了 PEP 426)。

package_name = 'Django'
PYPI_API_URL = 'https://pypi.python.org/pypi/{package_name}/json'
package_details_url = PYPI_API_URL.format(package_name=package_name)
response = requests.get(package_details_url)
data = json.loads(response.content)
data['info'].get('requires_dist')
data['info'].get('requires')
data['info'].get('setup_requires')
data['info'].get('test_requires')
data['info'].get('install_requires')

@techalchemy你看到上面的评论了吗?

这种情况一直在发生,基本上pipenv在“锁定”某些东西的同时在镇上走开:为什么这个问题被关闭了?

理解--skip-lock是要走的路,但根本不清楚为什么“安装”需要几秒钟,而“锁定”需要永远:如果至少 lock 命令会发出一些进展,那就太好了/更新日志:就目前的情况而言,甚至不清楚它是否永远停留在某种while True ......

我至少想知道是我做错了什么,还是只是 pipenv 的“功能”。

在我们的项目中pipenv lock太慢了。 它肯定会影响我们的正常使用。 现在添加一个新包对我们来说是一个真正的痛苦。 无论如何我们可以调试这种行为吗?

我正在尝试安装 PyTorch,它花了 20 分钟锁定,然后它拉出以下错误

Installing initially failed dependencies…
[pipenv.exceptions.InstallError]:   File "/usr/local/lib/python3.6/dist-packages/pipenv/core.py", line 1992, in do_install
[pipenv.exceptions.InstallError]:       skip_lock=skip_lock,
[pipenv.exceptions.InstallError]:   File "/usr/local/lib/python3.6/dist-packages/pipenv/core.py", line 1253, in do_init
[pipenv.exceptions.InstallError]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.InstallError]:   File "/usr/local/lib/python3.6/dist-packages/pipenv/core.py", line 859, in do_install_dependencies
[pipenv.exceptions.InstallError]:       retry_list, procs, failed_deps_queue, requirements_dir, **install_kwargs
[pipenv.exceptions.InstallError]:   File "/usr/local/lib/python3.6/dist-packages/pipenv/core.py", line 763, in batch_install
[pipenv.exceptions.InstallError]:       _cleanup_procs(procs, not blocking, failed_deps_queue, retry=retry)
[pipenv.exceptions.InstallError]:   File "/usr/local/lib/python3.6/dist-packages/pipenv/core.py", line 681, in _cleanup_procs
[pipenv.exceptions.InstallError]:       raise exceptions.InstallError(c.dep.name, extra=err_lines)
[pipenv.exceptions.InstallError]: ['Collecting pytorch==1.0.2 (from -r /tmp/pipenv-pb00kf8t-requirements/pipenv-vae35p2d-requirement.txt (line 1))', '  Using cached https://files.pythonhosted.org/packages/ee/67/f403d4ae6e9cd74b546ee88cccdb29b8415a9c1b3d80aebeb20c9ea91d96/pytorch-1.0.2.tar.gz', 'Building wheels for collected packages: pytorch', '  Building wheel for pytorch (setup.py): started', "  Building wheel for pytorch (setup.py): finished with status 'error'", '  Running setup.py clean for pytorch', 'Failed to build pytorch', 'Installing collected packages: pytorch', '  Running setup.py install for pytorch: started', "    Running setup.py install for pytorch: finished with status 'error'"]
[pipenv.exceptions.InstallError]: ['ERROR: Complete output from command /home/alex/.local/share/virtualenvs/pytorch-umelu-tG/bin/python3 -u -c \'import setuptools, tokenize;__file__=\'"\'"\'/tmp/pip-install-hix3yz6v/pytorch/setup.py\'"\'"\';f=getattr(tokenize, \'"\'"\'open\'"\'"\', open)(__file__);code=f.read().replace(\'"\'"\'\\r\\n\'"\'"\', \'"\'"\'\\n\'"\'"\');f.close();exec(compile(code, __file__, \'"\'"\'exec\'"\'"\'))\' bdist_wheel -d /tmp/pip-wheel-f_h8w1pz --python-tag cp36:', '  ERROR: Traceback (most recent call last):', '    File "<string>", line 1, in <module>', '    File "/tmp/pip-install-hix3yz6v/pytorch/setup.py", line 15, in <module>', '      raise Exception(message)', '  Exception: You tried to install "pytorch". The package named for PyTorch is "torch"', '  ----------------------------------------', '  ERROR: Failed building wheel for pytorch', '    ERROR: Complete output from command /home/alex/.local/share/virtualenvs/pytorch-umelu-tG/bin/python3 -u -c \'import setuptools, tokenize;__file__=\'"\'"\'/tmp/pip-install-hix3yz6v/pytorch/setup.py\'"\'"\';f=getattr(tokenize, \'"\'"\'open\'"\'"\', open)(__file__);code=f.read().replace(\'"\'"\'\\r\\n\'"\'"\', \'"\'"\'\\n\'"\'"\');f.close();exec(compile(code, __file__, \'"\'"\'exec\'"\'"\'))\' install --record /tmp/pip-record-xr7o93_5/install-record.txt --single-version-externally-managed --compile --install-headers /home/alex/.local/share/virtualenvs/pytorch-umelu-tG/include/site/python3.6/pytorch:', '    ERROR: Traceback (most recent call last):', '      File "<string>", line 1, in <module>', '      File "/tmp/pip-install-hix3yz6v/pytorch/setup.py", line 11, in <module>', '        raise Exception(message)', '    Exception: You tried to install "pytorch". The package named for PyTorch is "torch"', '    ----------------------------------------', 'ERROR: Command "/home/alex/.local/share/virtualenvs/pytorch-umelu-tG/bin/python3 -u -c \'import setuptools, tokenize;__file__=\'"\'"\'/tmp/pip-install-hix3yz6v/pytorch/setup.py\'"\'"\';f=getattr(tokenize, \'"\'"\'open\'"\'"\', open)(__file__);code=f.read().replace(\'"\'"\'\\r\\n\'"\'"\', \'"\'"\'\\n\'"\'"\');f.close();exec(compile(code, __file__, \'"\'"\'exec\'"\'"\'))\' install --record /tmp/pip-record-xr7o93_5/install-record.txt --single-version-externally-managed --compile --install-headers /home/alex/.local/share/virtualenvs/pytorch-umelu-tG/include/site/python3.6/pytorch" failed with error code 1 in /tmp/pip-install-hix3yz6v/pytorch/']
ERROR: ERROR: Package installation failed...

错误未读,不知道出了什么问题。 在环境中使用 pip 安装工作正常! 这真的是一个节目塞子。 回到requirements.txt...

这是我现在使用的解决方法:

export PIPENV_SKIP_LOCK=true

然后pipenv install foo将不会被锁定,您可以在有时间时通过运行pipenv lock手动锁定。

@awhillas很确定最后一行说明了您需要的所有内容:

您尝试安装“pytorch”。 为 PyTorch 命名的包是“torch”

锁定依赖关系很重要,所以我认为“跳过锁定”不是一个持久的解决方案。 同时,我根本不认为“锁定依赖项”(无论引擎盖下可能包含的任何内容)已得到最大程度的优化,就像现在一样,并且在功能上需要几分钟或几小时才能完成。 事实上,我的 pipenv 锁在一个 Pipfile 上运行了几分钟,它在失败之前有5个可笑的依赖项(堆栈附加在底部),在此期间仅使用了 10-15% 的可用 CPU 和一点内存。

我们能否至少进行一些集体努力来分析和确定瓶颈? 我有一种感觉,那里有一些愚蠢的低挂果实,只是在等待将此过程引入合理的运行时。

pipenv version 2018.11.26

对于 Pipfile:

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

[packages]

[dev-packages]
keras = "*"
tensorflow = "~=1.13"
setuptools = "*"
wheel = "*"
twine = "*"

[requires]
python_version = ">=3.6"
Pipfile.lock (63b275) out of date, updating to (5e165c)…
Locking [dev-packages] dependencies…
Traceback (most recent call last):
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/pexpect/expect.py", line 109, in expect_loop
    return self.timeout()
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/pexpect/expect.py", line 82, in timeout
    raise TIMEOUT(msg)
pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x105a17210>
searcher: searcher_re:
    0: re.compile('\n')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/bin/pipenv", line 11, in <module>
    load_entry_point('pipenv==2018.11.26', 'console_scripts', 'pipenv')()
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/cli/command.py", line 254, in install
    editable_packages=state.installstate.editables,
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/core.py", line 1992, in do_install
    skip_lock=skip_lock,
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/core.py", line 1221, in do_init
    pypi_mirror=pypi_mirror,
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/core.py", line 1068, in do_lock
    lockfile=lockfile
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/utils.py", line 649, in venv_resolve_deps
    c = resolve(cmd, sp)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/utils.py", line 517, in resolve
    result = c.expect(u"\n", timeout=environments.PIPENV_INSTALL_TIMEOUT)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/delegator.py", line 215, in expect
    self.subprocess.expect(pattern=pattern, timeout=timeout)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/pexpect/spawnbase.py", line 341, in expect
    timeout, searchwindowsize, async_)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/pexpect/spawnbase.py", line 369, in expect_list
    return exp.expect_loop(timeout)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/pexpect/expect.py", line 119, in expect_loop
    return self.timeout(e)
  File "/usr/local/Cellar/pipenv/2018.11.26_2/libexec/lib/python3.7/site-packages/pipenv/vendor/pexpect/expect.py", line 82, in timeout
    raise TIMEOUT(msg)
pexpect.exceptions.TIMEOUT: <pexpect.popen_spawn.PopenSpawn object at 0x105a17210>
searcher: searcher_re:
    0: re.compile('\n')

作为之前评论的补充,在第一次运行pip install --skip-lock之后,单独运行pip lock花费了合理的时间,大约 15 秒。 因此,可能是安装后调用 lock 已过时或有其他错误。 :)

仅供参考,我发现 tensorflow 是缓慢/超时锁定的罪魁祸首,如果这有助于分析 pipenv! (仍然认为这是一个pipenv问题......)

Tensorflow 是众多可以导致 pipenv 基本上成为无用工具的软件包之一。 不过,我喜欢组分析的建议。 我认为这是开始解决这个问题的好主意。 再次重申,PEP 566 启用了枚举依赖项(通过 pypi)而不加载整个源代码,这可能会有所帮助: https :

@brandonrobertz从我所见,下载依赖项的所有包是花费最多时间的地方。 这一点之前也得到了证实。

如何验证这一点:

  • 尝试创建一个新的Pipfile并在其中安装scipy (例如)并启用锁定
  • 等到锁定完成。 (在我的机器上大约需要 5 分钟)
  • 删除Pipfile.lock
  • 运行pipenv lock - 现在锁定只需要很少的时间(在我的机器上为 6 秒),因为所有软件包都已经下载并保存在通常位于~/.cache/pipenv Pipenv 缓存中

这是我用来测试的 Dockerfile:

FROM python:3.6
ENV WORKDIR=/work/
WORKDIR /work/
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install pipenv
RUN PIPENV_SKIP_LOCK=true pipenv install scipy
RUN date
RUN pipenv lock
RUN date
RUN rm Pipfile.lock
RUN pipenv lock
RUN date

@shtratos是的,这是有道理的,其他人在此问题线程中提出了这一建议。 下载和解析依赖项很昂贵。 其中一些步骤似乎可以通过从 pypi 依赖 API 中提取来消除。

对于某些库,这可能不起作用,因为质量差和实践不当(不使用 setup.py 或 requirements.txt)。 但是由于一些主要的违规者似乎是非常受欢迎的库(tensorflow、numpy),因此通过回退到超慢进程来实现这一点可能是一个很好的前进道路。

你能指出我在哪里可以找到该代码的方向吗? 我可以尝试在叉子中并行化它。

我认为https://github.com/pandas-dev/pandas/可能有问题? 这对我来说也是时间的共同点。

虽然pytest也可能是一个问题:\

我不这么认为,它在我的机器上运行良好,问题似乎比这更普遍

就我而言,问题似乎是 pylint。 简单地运行pipenv install pylint时,它总是挂在锁定上,请参阅https://github.com/pypa/pipenv/issues/2284#issuecomment -569457752

我在所有项目中都有同样的问题。
原因似乎是pylint。
Pipenv (pip) 可以安装成功,但是锁需要永远!
pipenv, version 2018.11.26

最小工作示例

djbrown@DESKTOP-65P6D75:~$ mkdir test
djbrown@DESKTOP-65P6D75:~$ cd test
djbrown@DESKTOP-65P6D75:~/test$ pipenv install --dev pylint --verbose
Creating a virtualenv for this project…
Pipfile: /home/djbrown/test/Pipfile
Using /usr/bin/python3 (3.6.9) to create virtualenv…
⠸ Creating virtual environment...Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/djbrown/.local/share/virtualenvs/test-PW-auWy_/bin/python3
Also creating executable in /home/djbrown/.local/share/virtualenvs/test-PW-auWy_/bin/python
Installing setuptools, pip, wheel...done.

✔ Successfully created virtual environment!
Virtualenv location: /home/djbrown/.local/share/virtualenvs/test-PW-auWy_
Creating a Pipfile for this project…
Installing pylint…
⠋ Installing...Installing 'pylint'
$ ['/home/djbrown/.local/share/virtualenvs/test-PW-auWy_/bin/pip', 'install', '--verbose', '--upgrade', 'pylint', '-i', 'https://pypi.org/simple']
Adding pylint to Pipfile's [dev-packages]…
✔ Installation Succeeded
Pipfile.lock not found, creating…
Locking [dev-packages] dependencies…
⠇ Locking...

我们知道并在跟踪此主题时遇到了许多问题。 见 #1785 #1886 #1891 和 PR #1896

npm 和 yarn 的优点是不必完全下载并执行每个预期的包来确定它们的依赖关系图,因为依赖关系是以明文形式指定的。 Python 依赖需要我们完全下载并执行每个包的安装文件来解析和计算。 这就是现实,它有点慢。 如果您等不及 2 分钟,或者您觉得不值得折衷,您可以随时通过--skip-lock

关闭跟踪其他问题。

其他 4 个问题中的 3 个现在已关闭,其余的问题自 2018 年以来没有看到任何活动。这个问题仍然存在,所以也许重新打开它是个好主意?

Python 依赖需要我们完全下载并执行每个包的安装文件来解析和计算

我不认为轮子仍然如此,现在应该是大多数包吗?

我知道我至少每次都必须为 dlib 构建轮子,这太可怕了。

解决依赖关系的过程应该在每个包版本的基础上缓存在某个地方,即使它每次都需要在客户端上进行另一次远程查找来获取树(它不应该,你也可以在事后将它缓存在本地) )。 例如,包 repos 可以轻松存储已解析的 dep 树。 缓存解析的 dep 树的额外网络命中总是比下载整个包和计算更快。

FWIW 我已经从我所有的项目中删除了 pipenv(这是一个主要原因,还有其他原因)。

virtualenv + pip (带有requirements.txt )现在工作得很好,即使是 Prod 部署; 无论如何,如今人们会部署一个完全成型的容器; 在真正进入 pipenv 之后,我不再明白它的意义所在。

请重新打开此问题。
否则 pipenv 永远不会成为参考打包工具

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jerzyk picture jerzyk  ·  3评论

konstin picture konstin  ·  3评论

ipmb picture ipmb  ·  3评论

hynek picture hynek  ·  3评论

FooBarQuaxx picture FooBarQuaxx  ·  3评论