numba / npyufunc / omppool.cpp: 5: 10: фатальная ошибка: файл 'omp.h' не найден - PullRequest
0 голосов
/ 13 января 2019

Эксперты

Я пытаюсь установить numba с помощью pip в виртуальной среде python. Я сталкиваюсь со следующей ошибкой:

Журнал ошибок:

cc: numba/cuda/cudadrv/_extras.c
    cc -shared -lpthread -L/usr/local/lib -fstack-protector build/temp.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/cuda/cudadrv/_extras.o -L/usr/local/lib -lpython3.6m -o build/lib.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/cuda/cudadrv/_extras.so
    building 'numba.npyufunc.omppool' extension
    C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe -fstack-protector -fno-strict-aliasing -fPIC

    compile options: '-I/home/russellb/py_devel/pyPlay/include -I/usr/local/include/python3.6m -c'
    extra options: '-fopenmp -std=c++11'
    cc: numba/npyufunc/omppool.cpp
    cc: numba/npyufunc/gufunc_scheduler.cpp
    numba/npyufunc/omppool.cpp:5:10: fatal error: 'omp.h' file not found
    #include <omp.h>
             ^~~~~~~
    1 error generated.
    numba/npyufunc/omppool.cpp:5:10: fatal error: 'omp.h' file not found
    #include <omp.h>
             ^~~~~~~
    1 error generated.
    error: Command "cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe -fstack-protector -fno-strict-aliasing -fPIC -I/home/russellb/py_devel/pyPlay/include -I/usr/local/include/python3.6m -c numba/npyufunc/omppool.cpp -o build/temp.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/npyufunc/omppool.o -fopenmp -std=c++11" failed with exit status 1
error
Cleaning up...
  Removing source in /tmp/pip-install-g3ckpog3/numba
Removed build tracker '/tmp/pip-req-tracker-21vj3szg'
Command "/home/russellb/py_devel/pyPlay/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-g3ckpog3/numba/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-lf_sxfnx/install-record.txt --single-version-externally-managed --compile --install-headers /home/russellb/py_devel/pyPlay/include/site/python3.6/numba" failed with error code 1 in /tmp/pip-install-g3ckpog3/numba/
Exception information:
Traceback (most recent call last):
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 143, in main
    status = self.run(options, args)
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 366, in run
    use_user_site=options.use_user_site,
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/req/__init__.py", line 49, in install_given_reqs
    **kwargs
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/req/req_install.py", line 791, in install
    spinner=spinner,
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/utils/misc.py", line 705, in call_subprocess
    % (command_desc, proc.returncode, cwd))
pip._internal.exceptions.InstallationError: Command "/home/russellb/py_devel/pyPlay/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-g3ckpog3/numba/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-lf_sxfnx/install-record.txt --single-version-externally-managed --compile --install-headers /home/russellb/py_devel/pyPlay/include/site/python3.6/numba" failed with error code 1 in /tmp/pip-install-g3ckpog3/numba/

Но omp.h присутствует в /usr/local/llvm70/lib/clang/7.0.1/include/omp.h.

Любая помощь для устранения неполадок / исправления этой проблемы очень ценится. Я бегу FreeBSD 12 и python3.6. Я использовал мягкую ссылку llvm7 по умолчанию, поскольку информация о ней была бы полезной.

Я думаю, makefile ищет omp.h в месте, отличном от того, где оно есть на самом деле. Если да, есть ли способ передать путь в качестве аргумента при установке pip?

ПОСЛЕДУЮЩИЙ: Установка CPPFLAGS в соответствии с рекомендациями @hoefling решает вышеуказанную проблему. Однако следующая ошибка выглядит следующим образом:

 C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe -fstack-protector -fno-strict-aliasing -I /usr/local/llvm70/lib/clang/7.0.1/include/ -fPIC

    compile options: '-I/home/russellb/py_devel/pyPlay/include -I/usr/local/include/python3.6m -c'
    extra options: '-fopenmp -std=c++11'
    cc: numba/npyufunc/omppool.cpp
    cc: numba/npyufunc/gufunc_scheduler.cpp
    c++ -shared -lpthread -L/usr/local/lib -fstack-protector -I /usr/local/llvm70/lib/clang/7.0.1/include/ build/temp.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/npyufunc/omppool.o build/temp.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/npyufunc/gufunc_scheduler.o -L/usr/local/lib -lpython3.6m -o build/lib.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/npyufunc/omppool.so -fopenmp
    building 'numba.npyufunc.workqueue' extension
    C compiler: cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe -fstack-protector -fno-strict-aliasing -I /usr/local/llvm70/lib/clang/7.0.1/include/ -fPIC

    compile options: '-I/home/russellb/py_devel/pyPlay/include -I/usr/local/include/python3.6m -c'
    cc: numba/npyufunc/workqueue.c
    cc: numba/npyufunc/gufunc_scheduler.cpp
    numba/npyufunc/workqueue.c:22:10: fatal error: 'alloca.h' file not found
    #include <alloca.h>
             ^~~~~~~~~~
    1 error generated.
    numba/npyufunc/workqueue.c:22:10: fatal error: 'alloca.h' file not found
    #include <alloca.h>
             ^~~~~~~~~~
    1 error generated.
    error: Command "cc -Wno-unused-result -Wsign-compare -Wunreachable-code -DNDEBUG -O2 -pipe -fstack-protector -fno-strict-aliasing -I /usr/local/llvm70/lib/clang/7.0.1/include/ -fPIC -I/home/russellb/py_devel/pyPlay/include -I/usr/local/include/python3.6m -c numba/npyufunc/workqueue.c -o build/temp.freebsd-12.0-RELEASE-p2-amd64-3.6/numba/npyufunc/workqueue.o" failed with exit status 1
error
Cleaning up...
  Removing source in /tmp/pip-install-fbsigyza/numba
Removed build tracker '/tmp/pip-req-tracker-0v_6_gji'
Command "/home/russellb/py_devel/pyPlay/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-fbsigyza/numba/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-pcr7ap84/install-record.txt --single-version-externally-managed --compile --install-headers /home/russellb/py_devel/pyPlay/include/site/python3.6/numba" failed with error code 1 in /tmp/pip-install-fbsigyza/numba/
Exception information:
Traceback (most recent call last):
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 143, in main
    status = self.run(options, args)
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/commands/install.py", line 366, in run
    use_user_site=options.use_user_site,
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/req/__init__.py", line 49, in install_given_reqs
    **kwargs
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/req/req_install.py", line 791, in install
    spinner=spinner,
  File "/home/russellb/py_devel/pyPlay/lib/python3.6/site-packages/pip/_internal/utils/misc.py", line 705, in call_subprocess
    % (command_desc, proc.returncode, cwd))
pip._internal.exceptions.InstallationError: Command "/home/russellb/py_devel/pyPlay/bin/python3.6 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-fbsigyza/numba/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-pcr7ap84/install-record.txt --single-version-externally-managed --compile --install-headers /home/russellb/py_devel/pyPlay/include/site/python3.6/numba" failed with error code 1 in /tmp/pip-install-fbsigyza/numba/

У меня есть два alloca.h в следующих местах:

/usr/src/contrib/ofed/libibverbs/alloca.h
/usr/src/cddl/compat/opensolaris/include/alloca.h

Я не знаю, какой из них правильный.

Спасибо за все ваши усилия.

1 Ответ

0 голосов
/ 13 января 2019

Linux

omp.h обычно является частью компилятора gcc, например в Ubuntu он установлен с

$ sudo apt install libgcc-7-dev

FreeBSD

Заголовок предоставлен devel/openmp. Вы можете установить его с помощью:

$ sudo pkg install devel/openmp

Это поместит omp.h в /usr/local/include, который по умолчанию должен включать dirs.

Пользовательские включают

Если вы хотите добавить заголовок в пользовательский каталог include, используйте переменные окружения CPPFLAGS / CFLAGS:

$ CPPFLAGS="-I/usr/local/llvm70/lib/clang/7.0.1/include/" pip install numba

Что касается второй ошибки, я полагаю, что numba не был написан с учетом FreeBSD (также не уверен, что CUDA и FreeBSD в целом работают хорошо). Может быть открыть вопрос ? Я полагаю, что предложение патча для numba/npyufunc/workqueue.c должно быть

 #include <pthread.h>
 #include <unistd.h>
+#if !defined (__FreeBSD__)
 #include <alloca.h>
+#endif
 #define NUMBA_PTHREAD
 #endif

Кроме этого, попробуйте включить второй (/usr/src/cddl/compat/opensolaris/include/alloca.h).

...