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.
Simply do not use pip. Not sure what you are trying to do is actually feasible (the project is apparently not compatible with Python 3.8 to begin with), but if you want to customize the compilation of the C extensions then skip pip at first and use the options of python setup.py build_ext
directly instead. Once you made progress there, then eventually go back to using pip via --global-options
.
Here are for example the options available in my case:
$ ./setup.py build_ext --help
Common commands: (see '--help-commands' for more)
setup.py build will build the package underneath 'build/'
setup.py install will install the package
Global options:
--verbose (-v) run verbosely (default)
--quiet (-q) run quietly (turns verbosity off)
--dry-run (-n) don't actually do anything
--help (-h) show detailed help message
--no-user-cfg ignore pydistutils.cfg in your home directory
Options for 'build_ext' command:
--build-lib (-b) directory for compiled extension modules
--build-temp (-t) directory for temporary files (build by-products)
--plat-name (-p) platform name to cross-compile for, if supported
(default: linux-x86_64)
--inplace (-i) ignore build-lib and put compiled extensions into the
source directory alongside your pure Python modules
--include-dirs (-I) list of directories to search for header files
(separated by ':')
--define (-D) C preprocessor macros to define
--undef (-U) C preprocessor macros to undefine
--libraries (-l) external C libraries to link with
--library-dirs (-L) directories to search for external C libraries
(separated by ':')
--rpath (-R) directories to search for shared C libraries at runtime
--link-objects (-O) extra explicit link objects to include in the link
--debug (-g) compile/link with debugging information
--force (-f) forcibly build everything (ignore file timestamps)
--compiler (-c) specify the compiler type
--parallel (-j) number of parallel build jobs
--swig-cpp make SWIG create C++ files (default is C)
--swig-opts list of SWIG command line options
--swig path to the SWIG executable
--user add user include, library and rpath
--help-compiler list available compilers
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
Some related documentation here: