Я пытаюсь установить сторонний пакет Python, используя pip (который включает в себя привязки функций C ++). Он работал на моих персональных компьютерах (под управлением Ubuntu 14.04 и 16.10).
Но я получаю сообщение об ошибке при попытке установки на кластерном сервере, что связано с компилятором C ++. Я хотел бы понять, откуда исходит ошибка (и если это можно исправить без sudo
).
Извините, если следующее не представлено хорошо, я не совсем знаком с использованием setuptools
или с C ++ и использованием привязок C ++ в python. Я изо всех сил старался представить имеющуюся у меня информацию, которая, на мой взгляд, актуальна.
Глядя в пакет setup.py
модуль (пакет george
), Я нахожу следующие соответствующие строки кода:
import tempfile
import setuptools
from setuptools import setup, Extension
from setuptools.command.build_ext import build_ext as _build_ext
# ... code ...
# Defines an object which inherits _build_ext (i.e build_ext)
class build_ext(_build_ext):
def build_extensions(self):
# ... several lines of code and defined methods...
# At one point, it checks if self.compiler has a 'flag': "-std=c++11"# This is done in a bit of a convoluted way, but I tried to extract
# the crucial parts of the code here:
compiler = self.compiler # I believe this is a property of setuptools.command.build_ext.build_ext
flagname = "-std=c++11"
with tempfile.NamedTemporaryFile("w", suffix=".cpp") as f:
f.write("int main (int argc, char **argv) { return 0; }")
try:
compiler.compile([f.name], extra_postargs=[flagname])
except setuptools.distutils.errors.CompileError:
raise RuntimeError(...)
# ... Otherwise continues on...
Так что я получаю RuntimeError в конце. Если это также помогает, сообщение об ошибке:
RuntimeError: Unsupported compiler -- at least C++11 support is needed!
Так что какой-то компилятор C ++ не имеет C++11
служба поддержки. Я пытаюсь понять это, поэтому у меня есть несколько вопросов:
Как мне узнать компилятор, о котором идет речь, т.е. setuptools.command.build_ext.build_ext
? Это как-то связано с моим g++
? И как я могу убедиться, что компилятор, на который он ссылается, имеет поддержку «C ++ 11»?
Есть ли способ исправить это или обновить что-то? К сожалению, это на сервере кластера, в результате у меня нет разрешений sudo. Но я проверил и gcc
а также g++
кажется установленным, с версией 4.4.7 20120313 (red Hat 4.4.7-18)
Задача ещё не решена.
Других решений пока нет …