Cython openMP в OSX ... нет сборки - PullRequest
0 голосов
/ 16 марта 2020

Я бьюсь уже 3 дня, чтобы настроить venv ... Мне нужен cython, openmp .... Моя IDE - это PyCharm Prof в macOS ... Я пробовал множество решений без результата ...

когда я пытаюсь собрать с PyCharm ... результат построения:

UserWarning: Unknown distribution option: 'cmd_class' warnings.warn(msg)
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
   or: setup.py --help [cmd1 cmd2 ...]
   or: setup.py --help-commands
   or: setup.py cmd --help

error: no commands supplied

поэтому, когда я пытаюсь с: python setup.py install build_ext --inplace Не строить снова .... Ошибка следующая:

ld: warning: directory not found for option '-L/install/prefix/lib'
ld: warning: -L path '/usr/local/Cellar/llvm/9.0.1/lib/libomp.dylib' is not a directory
ld: warning: directory not found for option '-L/install/prefix/lib'
ld: warning: directory not found for option '-L/usr/local/Cellar/gcc/9/gcc/x86_64-apple-darwin19/9.3.0/include/omp.h'
ld: library not found for -lomp
clang-9: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/local/opt/llvm/bin/clang++' failed with exit status 1

Я уже установил: brew install llvm brew install libomp

clang version 9.0.1
Target: x86_64-apple-darwin19.3.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin

Файл setup.py соответствует https://cython.readthedocs.io/en/latest/src/userguide/parallelism.html, но я много пробовал из разных модов ... я пытаюсь настроить 3-х дней сейчас ...

Наконец-то ... я знаю, что компиляция завершена с ошибками. Хотя, если я пытаюсь запустить его ... у меня есть следующие результаты ... может быть, это помогает ...

ImportError: dlopen(myfile.pyx, 2): Symbol not found: _omp_get_num_threads
  Referenced from: myfile.pyx
  Expected in: flat namespace
 in myfile.pyx.cpython-36m-darwin.so

Я где-то читал, что нет способа реализовать в OSX Cython-App с использованием openMP, но я все еще верю, что есть способ ... Моя система MacOS Catalina 10.15.3 ... Мне нужна ваша помощь !!!

1 Ответ

0 голосов
/ 17 марта 2020

Наконец-то я нашел решение ...

  1. В вашем венве:

pip install Cython setuptools

Найдите, где находится ваш компилятор g cc ... если вы уже установили, выполните следующие действия, в противном случае найдите и установите один ...

$ mdfind gcc | grep gcc

Поместите весь каталог g cc в venv вашего проекта. (путь: / My_Project / venv / g cc)

и setup.py должны быть следующими ... (путь : / My_Project / package / setup.py )

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
import os

os.environ["CC"]="../venv/gcc/9.3.0/bin/gcc-9"
os.environ["CXX"]="../venv/gcc/9.3.0/bin/gcc-9"

ext_modules = [Extension(
        "filename",
        ["filename.pyx"],
        language='c',
        extra_compile_args=['-fopenmp',"-Os",],
        extra_link_args=['-fopenmp', ],
    )
]

setup(
    name='filename',
    cmd_class = {'build_ext': build_ext},
    ext_modules= cythonize(ext_modules),
)
Ваш файл Cython: filename.pyx ... может начинаться с комментария директивы компилятора в верхней части filename.pyx следующим образом:
# distutils: extra_compile_args = -fopenmp
# distutils: extra_link_args = -fopenmp
Запустите в вашем венве команду компиляции:

$ python setup.py build_ext -i

Наконец, вы можете импортировать ваш файл Cython в ваш код ... вверху вашего python файла и т.д. c. mycode.py :
import filename

filename.myCythonFunc()

Выше приведено решение для OSX-10.15.3 macOS Catalina.

...