当依赖项为numpy/scipy/时,pip install无法正确处理依赖项。。。(其他几个人)?

2024-10-05 17:21:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个virtualenv(系统详细信息如下),numpy、scipy和pandas似乎没有被正确地视为依赖关系。在

澄清一下,不管numpy是否出现在要求.txt,即使它们按正确的顺序排列。在

这很不方便,而且与包管理器的工作方式正好相反,我认为:)

那么什么给予?当我从头开始构建virtualenv时,输出如下:

[bdundee@etl-dev Py26]$ ls
requirements.txt  requirements.txt~
[bdundee@etl-dev Py26]$ virtualenv ./env/sqrt_python26 --no-site-packages
New python executable in ./env/sqrt_python26/bin/python
Installing setuptools, pip...done.
[bdundee@etl-devPy26]$ source ./env/sqrt_python26/bin/activate
(sqrt_python26)[bdundee@etl-devPy26]$ pip install -r ./requirements.txt 
Downloading/unpacking Bottleneck==0.8.0 (from -r ./requirements.txt (line 6))

...

    import numpy as np

ImportError: No module named numpy

显然numpy应该被视为瓶颈的依赖项,而不是。在

瓶颈不是这个问题的唯一模块,还有其他一些模块。这迫使我创造了_皮普·什公司名称:

^{pr2}$

我也遇到了scipy和pandas(例如statsmodels)的错误。在

问题:

  • 这些程序包的安装说明中有这些错误吗?在
  • 这是一个纽姆特有的东西吗?在
  • 有没有一种方法可以解决这个问题,而不需要安装numpy、scipy和pandas的“预”构建脚本?在

系统详细信息:

  • AWS CentOS(无论当前版本是什么)
  • Python 2.6.9
  • 数字1.7.1

Tags: devnumpyenvtxtpandasvirtualenv系统etl
2条回答

pip的工作原理如下(请随时纠正我)。在

  • 每个文件都被下载并解包。在
  • 每个文件都被生成python setup.py build
  • 每个文件都已安装python setup.py install

问题是某些模块中的setup.py文件要求在构建或安装步骤中存在相关模块,如果numpy/scipy/等在requirements.txt中,这是不可能的。在

matplotlib存在一个similar issue,pip社区的情绪是“这不是pip”。很公平。在

在我看来,最好的解决方法就是编写一个包装器。如果其他人知道更好的方法,请告诉我:)

#!/usr/bin/bash

INSTALL_DIR=$IMPORT/../Environment/Py26/env/sqrt_python26

## Step 1: build the virtualenv
virtualenv $INSTALL_DIR

## Now use the virtualenv
source $INSTALL_DIR/bin/activate

## Install numpy
pip install numpy==1.7.1

## Install scipy
pip install scipy==0.12.0

## Install pandas
pip install pandas==0.12.0

## Some others...
pip install patsy==0.2.1
pip install pycurl==7.19.0

## Now run requirements.txt
pip install -r ./requirements.txt

## finished, shut down virtualenv
deactivate

这似乎是一些不同的包使用的问题要求.txt. 你可以用一个脚本来解析每一行并运行install,我相信有更优雅的方法来完成它,但至少它会按顺序安装,这样你就不会得到错误

import pip
with open("requirements.txt", "r") as f:
    for line in f:
        pip.main(['install', line])

相关问题 更多 >