问题描述
我正在尝试在Linux Ubuntu 16.04上的Python 3.6虚拟环境中安装CVXPY软件包。
我首先创建了一个虚拟环境:
python3.6 -m venv tutorial-env
然后我按照说明here,并手动安装了以下依赖项:
pip install numpy
pip install scipy
然后我尝试下载CVXPY:
pip install cvxpy
但是出现以下错误:
Collecting cvxpy
Using cached cvxpy-1.1.7.tar.gz (1.0 MB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel Metadata ... done
Requirement already satisfied: osqp>=0.4.1 in ./tutorial-env/lib/python3.6/site-packages (from cvxpy) (0.6.1)
Requirement already satisfied: scipy>=1.1.0 in ./tutorial-env/lib/python3.6/site-packages (from cvxpy) (1.5.4)
Requirement already satisfied: numpy>=1.15 in ./tutorial-env/lib/python3.6/site-packages (from cvxpy) (1.19.4)
Requirement already satisfied: ecos>=2 in ./tutorial-env/lib/python3.6/site-packages (from cvxpy) (2.0.7.post1)
Collecting scs>=1.1.6
Using cached scs-2.1.2.tar.gz (3.5 MB)
Requirement already satisfied: future in ./tutorial-env/lib/python3.6/site-packages (from osqp>=0.4.1->cvxpy) (0.18.2)
Using legacy 'setup.py install' for scs,since package 'wheel' is not installed.
Building wheels for collected packages: cvxpy
Building wheel for cvxpy (PEP 517) ... error
ERROR: Command errored out with exit status 1:
command: /home/[username]/tutorial-env/bin/python3.6 /home/[username]/tutorial-env/lib/python3.6/site-packages/pip/_vendor/pep517/_in_process.py build_wheel /tmp/tmpehj5rzra
cwd: /tmp/pip-install-bu874zhr/cvxpy
Complete output (426 lines):
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.6
creating build/lib.linux-x86_64-3.6/cvxpy
copying cvxpy/__init__.py -> build/lib.linux-x86_64-3.6/cvxpy
copying cvxpy/error.py -> build/lib.linux-x86_64-3.6/cvxpy
copying cvxpy/settings.py -> build/lib.linux-x86_64-3.6/cvxpy
[....cut for length...]
running build_ext
building '_cvxcore' extension
creating build/temp.linux-x86_64-3.6
creating build/temp.linux-x86_64-3.6/cvxpy
creating build/temp.linux-x86_64-3.6/cvxpy/cvxcore
creating build/temp.linux-x86_64-3.6/cvxpy/cvxcore/src
creating build/temp.linux-x86_64-3.6/cvxpy/cvxcore/python
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Icvxpy/cvxcore/src/ -Icvxpy/cvxcore/python/ -Icvxpy/cvxcore/include/ -I/home/[username]/tutorial-env/include -I/usr/include/python3.6m -I/tmp/pip-build-env-7cso5slq/overlay/lib/python3.6/site-packages/numpy/core/include -c cvxpy/cvxcore/src/cvxcore.cpp -o build/temp.linux-x86_64-3.6/cvxpy/cvxcore/src/cvxcore.o -O3
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Icvxpy/cvxcore/src/ -Icvxpy/cvxcore/python/ -Icvxpy/cvxcore/include/ -I/home/[username]/tutorial-env/include -I/usr/include/python3.6m -I/tmp/pip-build-env-7cso5slq/overlay/lib/python3.6/site-packages/numpy/core/include -c cvxpy/cvxcore/src/LinopOperations.cpp -o build/temp.linux-x86_64-3.6/cvxpy/cvxcore/src/LinopOperations.o -O3
cvxpy/cvxcore/src/LinopOperations.cpp: In function ‘Tensor get_rmul_mat(const Linop&,int)’:
cvxpy/cvxcore/src/LinopOperations.cpp:717:7: warning: variable ‘arg_cols’ set but not used [-Wunused-but-set-variable]
int arg_cols;
^
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Icvxpy/cvxcore/src/ -Icvxpy/cvxcore/python/ -Icvxpy/cvxcore/include/ -I/home/[username]/tutorial-env/include -I/usr/include/python3.6m -I/tmp/pip-build-env-7cso5slq/overlay/lib/python3.6/site-packages/numpy/core/include -c cvxpy/cvxcore/src/Utils.cpp -o build/temp.linux-x86_64-3.6/cvxpy/cvxcore/src/Utils.o -O3
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Icvxpy/cvxcore/src/ -Icvxpy/cvxcore/python/ -Icvxpy/cvxcore/include/ -I/home/[username]/tutorial-env/include -I/usr/include/python3.6m -I/tmp/pip-build-env-7cso5slq/overlay/lib/python3.6/site-packages/numpy/core/include -c cvxpy/cvxcore/python/cvxcore_wrap.cpp -o build/temp.linux-x86_64-3.6/cvxpy/cvxcore/python/cvxcore_wrap.o -O3
cvxpy/cvxcore/python/cvxcore_wrap.cpp:178:21: Fatal error: Python.h: No such file or directory
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' Failed with exit status 1
----------------------------------------
ERROR: Failed building wheel for cvxpy
Failed to build cvxpy
ERROR: Could not build wheels for cvxpy which use PEP 517 and cannot be installed directly
Pastebin with the full error message.
我已经安装了CVXPY,并且正在使用Python 3.5.2。我不确定为什么要在Python 3.6.12上运行它会遇到很多麻烦。在尝试安装CVXPY之前,我尝试手动安装依赖项OSQP,ECOS和SCS,但是SCS会引发相同类型的错误(SCS的构建轮子失败)。
我不知道这意味着什么,也无法对此做出正面或反面的解释。任何帮助表示赞赏。
编辑:所以我做了其中一项建议的注释,并安装了以下内容:
pip install wheel
但是我仍然遇到错误。
我试图通过克隆git存储库来安装依赖项,但没有任何变化。
(tutorial-env) [username]@CS:~$ git clone https://github.com/cvxgrp/cvxpy
cloning into 'cvxpy'...
remote: Enumerating objects: 169,done.
remote: Counting objects: 100% (169/169),done.
remote: Compressing objects: 100% (124/124),done.
remote: Total 58970 (delta 90),reused 75 (delta 41),pack-reused 58801
Receiving objects: 100% (58970/58970),168.74 MiB | 6.17 MiB/s,done.
Resolving deltas: 100% (40842/40842),done.
Checking connectivity... done.
(tutorial-env) [username]@CS:~$ cd ~/cvxpy
(tutorial-env) [username]@CS:~/cvxpy$ pip install -e .
Obtaining file:///home/[username]/cvxpy
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel Metadata ... done
Requirement already satisfied: numpy>=1.15 in /home/[username]/tutorial-env/lib/python3.6/site-packages (from cvxpy==1.1.7) (1.19.4)
Requirement already satisfied: osqp>=0.4.1 in /home/[username]/tutorial-env/lib/python3.6/site-packages (from cvxpy==1.1.7) (0.6.1)
Requirement already satisfied: ecos>=2 in /home/[username]/tutorial-env/lib/python3.6/site-packages (from cvxpy==1.1.7) (2.0.7.post1)
Collecting scs>=1.1.6
Using cached scs-2.1.2.tar.gz (3.5 MB)
Requirement already satisfied: scipy>=1.1.0 in /home/[username]/tutorial-env/lib/python3.6/site-packages (from cvxpy==1.1.7) (1.5.4)
Requirement already satisfied: future in /home/[username]/tutorial-env/lib/python3.6/site-packages (from osqp>=0.4.1->cvxpy==1.1.7) (0.18.2)
Building wheels for collected packages: scs
Building wheel for scs (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /home/[username]/tutorial-env/bin/python3.6 -u -c 'import sys,setuptools,tokenize; sys.argv[0] = '"'"'/tmp/pip-install-2yhxymp8/scs/setup.py'"'"'; __file__='"'"'/tmp/pip-install-2yhxymp8/scs/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-xrktv9lx
cwd: /tmp/pip-install-2yhxymp8/scs/
[snipped for length]
error: Command "x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPYTHON -DCTRLC=1 -DDLONG=1 -DcopYAMATRIX -DUSE_LAPACK -DHAVE_CBLAS -DHAVE_CBLAS -Iscs/include -Iscs/linsys -Iscs/linsys/cpu/direct/ -Iscs/linsys/external/amd -Iscs/linsys/external/dqlql -I/home/[username]/tutorial-env/lib/python3.6/site-packages/numpy/core/include -I/home/[username]/tutorial-env/include -I/usr/include/python3.6m -c src/scsmodule.c -o build/temp.linux-x86_64-3.6/src/scsmodule.o -O3" Failed with exit status 1
----------------------------------------
ERROR: Failed building wheel for scs
Running setup.py clean for scs
Failed to build scs
Installing collected packages: scs,cvxpy
Running setup.py install for scs ... error
ERROR: Command errored out with exit status 1:
command: /home/[username]/tutorial-env/bin/python3.6 -u -c 'import sys,'"'"'exec'"'"'))' install --record /tmp/pip-record-yr_7wj14/install-record.txt --single-version-externally-managed --compile --install-headers /home/[username]/tutorial-env/include/site/python3.6/scs
cwd: /tmp/pip-install-2yhxymp8/scs/
Complete output (115 lines):
[snipped for length]
error: Command "x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DPYTHON -DCTRLC=1 -DDLONG=1 -DcopYAMATRIX -DUSE_LAPACK -DHAVE_CBLAS -DHAVE_CBLAS -Iscs/include -Iscs/linsys -Iscs/linsys/cpu/direct/ -Iscs/linsys/external/amd -Iscs/linsys/external/dqlql -I/home/[username]/tutorial-env/lib/python3.6/site-packages/numpy/core/include -I/home/[username]/tutorial-env/include -I/usr/include/python3.6m -c src/scsmodule.c -o build/temp.linux-x86_64-3.6/src/scsmodule.o -O3" Failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1: /home/[username]/tutorial-env/bin/python3.6 -u -c 'import sys,'"'"'exec'"'"'))' install --record /tmp/pip-record-yr_7wj14/install-record.txt --single-version-externally-managed --compile --install-headers /home/[username]/tutorial-env/include/site/python3.6/scs Check the logs for full command output.
Pastebin with full error message。
然后我尝试首先自己安装SCS依赖项,但仍然是同样的错误。 Pastebin with full error message。
解决方法
**已修复。
完成@Czaporka的建议后,并使用pip安装车轮:
pip install wheels
错误消息继续存在。在完整的错误消息中,用以下行标识了问题:
fatal error: Python.h: No such file or directory
compilation terminated.
this answer中概述了解决此错误消息的方法。在Linux终端上运行以下命令可以解决此问题:
sudo apt-get install python3.6-dev
我可以继续使用pip安装CVXPY,而没有任何其他问题。