Скомпилируйте opencv- python для pypy3 - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу использовать pypy для лучшей Python производительности. Я установил pypy через оснастку на Ubuntu 18.04. Теперь я могу использовать pypy в virtualenv (на самом деле я использую pipenv)

Попытка скомпилировать opencv- python для pypy3 в virtualenv из git репо по:

git clone https://github.com/skvark/opencv-python.git
python setup.py install

и получаю:

Exception: Not found: 'python/cv2[^/]*\.pypy36\-pp73\-x86_64\-linux\-gnu\.so'

Я нашел этот пост , который предлагает:

pyenv virtualenv pypy3.7.2.0 cv_env
mkdir cv_env
pyenv local cv_env
pip install numpy
git clone https://github.com/skvark/opencv-python
cd opencv-python
CMAKE_ARGS="-D PYTHON3_LIBRARY=~/.pyenv/versions/pypy3.6-7.2.0/lib/libpypy-c.so" python setup.py bdist_wheel
pip install dist/**.wheel

Так что я клонировал репо и попытался запустить:

CMAKE_ARGS="-D PYTHON3_LIBRARY=/snap/pypy3/50/bin/libpypy3-c.so" python setup.py bdist_wheel

Я получаю:

CMake Error: The source directory "/home/user/Projects/project1_pypy/pypy/opencv-python/_skbuild/linux-x86_64-3.6/cmake-build/PYTHON3_LIBRARY=/snap/pypy3/50/bin/libpypy3-c.so" does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
Traceback (most recent call last):
  File "/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/site-packages/skbuild/setuptools_wrap.py", line 574, in setup
    languages=cmake_languages
  File "/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/site-packages/skbuild/cmaker.py", line 232, in configure
    os.path.abspath(CMAKE_BUILD_DIR())))

An error occurred while configuring with CMake.
  Command:
    "cmake" "/home/user/Projects/project1_pypy/pypy/opencv-python/opencv" "-G" "Unix Makefiles" "-DCMAKE_INSTALL_PREFIX:PATH=/home/user/Projects/project1_pypy/pypy/opencv-python/_skbuild/linux-x86_64-3.6/cmake-install" "-DPYTHON_EXECUTABLE:FILEPATH=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/bin/python" "-DPYTHON_VERSION_STRING:STRING=3.6.9" "-DPYTHON_INCLUDE_DIR:PATH=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/include" "-DPYTHON_LIBRARY:FILEPATH=" "-DSKBUILD:BOOL=TRUE" "-DCMAKE_MODULE_PATH:PATH=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/site-packages/skbuild/resources/cmake" "-DPYTHON3_EXECUTABLE=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/bin/python" "-DBUILD_opencv_python3=ON" "-DOPENCV_SKIP_PYTHON_LOADER=ON" "-DOPENCV_PYTHON3_INSTALL_PATH=python" "-DINSTALL_CREATE_DISTRIB=ON" "-DBUILD_opencv_apps=OFF" "-DBUILD_SHARED_LIBS=OFF" "-DBUILD_TESTS=OFF" "-DBUILD_PERF_TESTS=OFF" "-DBUILD_DOCS=OFF" "-DWITH_QT=4" "-DWITH_V4L=ON" "-DENABLE_PRECOMPILED_HEADERS=OFF" "-DWITH_IPP=OFF" "-D" "PYTHON3_LIBRARY=/snap/pypy3/50/bin/libpypy3-c.so" "-DCMAKE_BUILD_TYPE:STRING=Release"

Поэтому я попытался отредактировать setup.py и добавить под if os.name == 'nt' else [:

"-DPYTHON_LIBRARY=/snap/pypy3/50/bin/libpypy3-c.so",

Похоже, что он собирается завершить sh компиляцию, а затем я получаю ту же ошибку, что и раньше: Exception: Not found: 'python/cv2[^/]*\.pypy36\-pp73\-x86_64\-linux\-gnu\.so'

Не правильно ли я передал аргумент компиляции? Как правильно установить эту переменную пути? Очевидно, он объединяет эти два пути для формирования ошибочного: CMake Error: The source directory "/home/user/Projects/project1_pypy/pypy/opencv-python/_skbuild/linux-x86_64-3.6/cmake-build/PYTHON3_LIBRARY=/snap/pypy3/50/bin/libpypy3-c.so" does not exist.

Edit:

По выводу ошибки он показывает мне команду компиляции:

"cmake" "/home/user/Projects/project1_pypy/pypy/opencv-python/opencv" "-DPYTHON_LIBRARY=/snap/pypy3/50/bin/libpypy3-c.so" "-G" "Unix Makefiles" "-DCMAKE_INSTALL_PREFIX:PATH=/home/user/Projects/project1_pypy/pypy/opencv-python/_skbuild/linux-x86_64-3.6/cmake-install" "-DPYTHON_EXECUTABLE:FILEPATH=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/bin/python" "-DPYTHON_VERSION_STRING:STRING=3.6.9" "-DPYTHON_INCLUDE_DIR:PATH=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/include" "-DPYTHON_LIBRARY:FILEPATH=" "-DSKBUILD:BOOL=TRUE" "-DCMAKE_MODULE_PATH:PATH=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/site-packages/skbuild/resources/cmake" "-DPYTHON3_EXECUTABLE=/home/user/.local/share/virtualenvs/project1_pypy-5DRSQTA5/bin/python" "-DBUILD_opencv_python3=ON" "-DOPENCV_SKIP_PYTHON_LOADER=ON" "-DOPENCV_PYTHON3_INSTALL_PATH=python" "-DINSTALL_CREATE_DISTRIB=ON" "-DBUILD_opencv_apps=OFF" "-DBUILD_SHARED_LIBS=OFF" "-DBUILD_TESTS=OFF" "-DBUILD_PERF_TESTS=OFF" "-DBUILD_DOCS=OFF" "-DWITH_QT=4" "-DWITH_V4L=ON" "-DENABLE_PRECOMPILED_HEADERS=OFF" "-DWITH_IPP=OFF" "-DCMAKE_BUILD_TYPE:STRING=Release"

, но это, кажется, не полностью компилирует модуль. HRM. Я не понимаю, почему добавление аргумента в setup.py не работает.

Ответ должен иллюстрировать исправление для компиляции opencv- python для pypy3

Ответы [ 2 ]

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

libc версия в /snap/core/current/lib/x86_64-linux-gnu/ отличается от системы. Вы строите numpy, используя системную библиотеку c, а система сборки использует оснастку lib c. Вы можете удалить папку _skbuild и запустить setup.py, чтобы увидеть сообщение об ошибке (не отображается с кешем). Использование PyPy, установленного из PPA, решает проблему.

0 голосов
/ 26 февраля 2020

Правильный рецепт здесь . Подтвердите, если вам это нравится :)

...