I am trying to install (compile) the python binding for OpenEXR to my modules. I'm using Python 3.8.0.
First, I've simply tried pip install openexr
that results in an error caused by missing header files in a C++ installation of OpenEXR. So I've installed vcpkg and the OpenEXR stuff with it. Executing
pip install --global-option=build_ext --global-option="-IC:\vcpkg\packages\openexr_x86-windows\include\OpenEXR" --global-option="-LC:\vcpkg\packages\openexr_x86-windows\lib" openexr
is failing due to syntax errors in OpenEXR.cpp
, which is from the Python binding. I've downloaded the module manually from here and tried to install/compile that, which causes the same syntax errors in the same file.
My Visual Studio doesn't find any problems in the file, so I'm assuming that the problem must be the C++ compiler that pip uses to install that module. I have the Buildtools 2019 installed and added the 2017 ones but it doesn't help. I guess I have to specify the compiler for pip but here I cannot find any examples on the internet about doing so.
My question: How do you specify the compiler that pip shall use to install OpenEXR?
The mentioned syntax errors:
C:\Users\alexa\PycharmProjects\Test\venv\lib\site-packages\pip-19.0.3-py3.8.egg\pip\_internal\commands\install.py:207: UserWarning: Disabling all use of wheels due to the use of --build-options / --global-options / --install-options.
cmdoptions.check_install_build_global(options)
Collecting openexr
Using cached https://files.pythonhosted.org/packages/7c/c4/76bf884f59d3137847edf8b93aaf40f6257d8315d0064e8b1a606ad80b1b/OpenEXR-1.3.2.tar.gz
Installing collected packages: openexr
Running setup.py install for openexr ... error
Complete output from command C:\Users\alexa\PycharmProjects\Test\venv\Scripts\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\alexa\\AppData\\Local\\Temp\\pip-install-81q20tqc\\openexr\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" build_ext -IC:\vcpkg\packages\openexr_x86-windows\include\OpenEXR -LC:\vcpkg\packages\openexr_x86-windows\lib install --record C:\Users\alexa\AppData\Local\Temp\pip-record-gjbp0u64\install-record.txt --single-version-externally-managed --compile --install-headers C:\Users\alexa\PycharmProjects\Test\venv\include\site\python3.8\openexr:
running build_ext
building 'OpenEXR' extension
creating build
creating build\temp.win32-3.8
creating build\temp.win32-3.8\Release
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD -I/usr/include/OpenEXR -I/usr/local/include/OpenEXR -I/opt/local/include/OpenEXR -IC:\vcpkg\packages\openexr_x86-windows\include\OpenEXR -IC:\Users\alexa\PycharmProjects\Test\venv\include -IC:\Users\alexa\AppData\Local\Programs\Python\Python38-32\include -IC:\Users\alexa\AppData\Local\Programs\Python\Python38-32\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.21.27702\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /EHsc /TpOpenEXR.cpp /Fobuild\temp.win32-3.8\Release\OpenEXR.obj -g -DVERSION="1.3.2"
cl : Command line warning D9002 : ignoring unknown option '-g'
OpenEXR.cpp
OpenEXR.cpp(1011): warning C4244: 'argument': conversion from 'double' to 'const T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1025): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1024): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1027): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1026): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1035): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1035): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1082): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1081): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1084): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1083): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1086): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1085): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1088): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1087): warning C4244: 'argument': conversion from 'double' to 'T', possible loss of data
with
[
T=float
]
OpenEXR.cpp(1241): error C2143: syntax error: missing ')' before 'constant'
OpenEXR.cpp(1241): error C2664: 'PyObject *PyBytes_FromString(const char *)': cannot convert argument 1 from 'double' to 'const char *'
OpenEXR.cpp(1241): error C2660: 'PyDict_SetItemString': function does not take 2 arguments
C:\Users\alexa\AppData\Local\Programs\Python\Python38-32\include\dictobject.h(58): note: see declaration of 'PyDict_SetItemString'
OpenEXR.cpp(1241): error C2143: syntax error: missing ';' before 'constant'
OpenEXR.cpp(1241): error C2059: syntax error: ')'
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.21.27702\\bin\\HostX86\\x86\\cl.exe' failed with exit status 2
----------------------------------------
You can find binaries for that OpenEXR binding for Python 3 and 2 here. Anyways, if someone knows how to adjust the compilation process done by pip to make it work, please share.