当前位置: 首页 > 面试题库 >

缺少依赖项声明的软件包(如scipy)的构建轮

贺玉石
2023-03-14
问题内容

我认为这没有什么区别,但我使用的是Python 2.7。

因此,我的问题的一般部分如下:我virtualenv为每个项目使用一个单独的项目。我没有管理员访问权限,而且我也不想弄乱系统安装的软件包。自然,我想使用轮子来加快整个系统的软件包升级和安装virtualenv。如何构建仅在特定范围内满足依赖关系的轮子virtualenv

具体来说,发行

pip wheel -w $WHEELHOUSE scipy

失败于

Building wheels for collected packages: scipy
  Running setup.py bdist_wheel for scipy
  Destination directory: /home/moritz/.pip/wheelhouse
  Complete output from command /home/moritz/.virtualenvs/base/bin/python -c "import setuptools;__file__='/home/moritz/.virtualenvs/base/build/scipy/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" bdist_wheel -d /home/moritz/.pip/wheelhouse:
  Traceback (most recent call last):

  File "<string>", line 1, in <module>

  File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 237, in <module>

    setup_package()

  File "/home/moritz/.virtualenvs/base/build/scipy/setup.py", line 225, in setup_package

    from numpy.distutils.core import setup

ImportError: No module named numpy.distutils.core

----------------------------------------
  Failed building wheel for scipy
Failed to build scipy
Cleaning up...

因为numpy不存在全局和在构建轮,当工作virtualenvnumpy安装的是积极的,这似乎是一个可怕的想法有车轮依赖于特定virtualenv的版本numpy

html" target="_blank">pandas这也取决于numpy似乎要安装其自己的组件,numpy但是我不确定这是最佳解决方案。

我可以安装numpy使用--user,并用它来建立scipy轮。有更好的选择吗?


问题答案:
  • 有一个python包(如scipy),该包依赖于其他包(如numpy),但未setup.py声明该要求/依赖关系。
  • 在当前环境提供所需包装的情况下,为此类包装构建轮子会成功。
  • 如果没有所需的软件包,则组装轮子会失败。

注意:理想的解决方案是setup.py通过添加必需的包声明来更正损坏的包。但这大部分是不可行的,我们必须另辟way径。

解决方案:首先安装所需的软件包

(用于安装程序scipy需要numpy)具有两个步骤

  1. 制造轮子
  2. 使用轮子安装所需的包装

用所需的轮胎填充驾驶室

此操作仅需执行一次,然后可以重复使用多次。

  1. 有正确配置PIP配置,以便从车轮该安装是允许的,操舵室目录被设置和使用重叠download-cachefind-links如在下面的例子pip.conf

    [global]
    

    download-cache = /home/javl/.pip/cache
    find-links = /home/javl/.pip/packages

    [install]
    use-wheel = yes

    [wheel]
    wheel-dir = /home/javl/.pip/packages

  2. 为所有必须安装的软件包安装所有必需的系统

  3. 制作所需包装的轮子(numpy

    $ pip wheel numpy
    
  4. 设置virtualenv(只需一次),将其激活并安装在此处numpy

    $ pip install numpy
    

准备好轮子后,它应该很快。

  1. scipy(仍然在virtualenv中)构建轮子
    $ pip wheel scipy
    

现在,您的驾驶室将装有所需的车轮。

  1. 您可以删除临时的virtualenv,不再需要它。

安装到最新的virtualenv中

我假设您已经创建了新的virtualenv,将其激活并希望在此scipy安装。

直接scipy从新scipy车轮安装仍会因丢失而失败numpy。我们通过numpy首先安装克服了这一问题。

$ pip install numpy

然后完成

$ pip install scipy

我想这可以在一个电话中完成(但我没有测试)

$ pip install numpy scipy

反复安装scipy经过验证的版本

在将来的某个时刻,很可能会发行scipy或的新版本,numpy并且pip会尝试安装操舵室中没有任何车轮的最新版本。

如果你可以用到目前为止你已经使用了版本的生活,你必须创建requirements.txt陈述的版本,numpyscipy你喜欢的,并从它安装。

这将确保在实际使用之前提供所需的包装。



 类似资料:
  • 我试图用Brazel建立一个围棋应用程序。我正在处理的是一个现有的私有GitHub repo(位置:),我的目标是从main.Go文件中创建一个二进制文件,该文件依赖于其他一些Go文件来实现它的方法。这是我的build.bazel文件,位于名为e2e的文件夹中,所有这些go文件都在这里: 这就是导入在main.go文件中的外观: 这是因为在主文件中导入了。为了包含导入,如果我将其添加到deps:中

  • 在Dockerfile中运行yarn install时无法获取node\u modules文件夹 docker-compose.yml package.json Dockferfile文件 docker-compose build时步骤RUN纱线安装的输出: 运行命令:docker compose运行web bash以进入容器 没有node_modules文件夹,但稍后在容器内运行时:纱线安装输出

  • 我有一个用Spring Boot的Gradle插件构建的可执行JAR。它在生成文件中具有以下依赖项: 建筑格拉德尔 问题是,在我运行之后,创建的工件不包含jar,只包含其他的tivemq jars: 因此,当我尝试运行jar时,我遇到了一个异常,即无法找到此依赖项中的类: 在构建过程中,依赖被下载,它可以在我的gradle缓存中找到,似乎出于某种原因,Spring Boot的Gradle插件在引导

  • 我正在尝试扩展TestBase类,但找不到以下项的正确依赖关系: 我不太熟悉Maven,但在pom.xml中添加了以下依赖项: 我希望olwapi-contract依赖项包含测试包。但是,在我的Maven依赖项下,我只看到以下内容:

  • 我能够成功运行所有使用pandas的脚本,但突然我所有的pandas脚本都出现以下错误: 回溯(最近一次呼叫最后一次): 文件“data_visualization.py”,第5行,在 文件“/usr/lib64/python2.7/site packages/pandas/init.py”,第18行,在 最近我没有安装或更新任何新东西。 有人对此有解决办法吗? 我卸载了熊猫和Numpy,并重新安

  • 我还刷新了项目依赖项(右键单击Project->Gradle->Refresh Gradle dependencies),并重新构建了项目。