Search code examples
python-3.xwindowscentosquickfixpython-wheel

Installing quickfix module on Windows \ Linux CentOS for Python3


I have been trying to install quickfix on both my Windows Machine and CentOs VM with no luck.

-> Attempt in Windows 10: Installed the wheel file successfully from https://www.lfd.uci.edu/~gohlke/pythonlibs/#quickfix Checked the versions of python and architecture prior to selecting the wheel file, was able to install with no issues. When I started up python at the command prompt and ran help("modules"), I am able to see that quickfix (and all the versions are installed).

C:\Users\NickN\Downloads>python --version
Python 3.7.3

C:\Users\NickN\Downloads>pip install quickfix-1.15.1-cp37-cp37m-win_amd64.whl
Requirement already satisfied: quickfix==1.15.1 from file:///C:/Users/NickN/Downloads/quickfix-1.15.1-cp37-cp37m-win_amd64.whl in c:\python37\lib\site-packages (1.15.1)

However, when I start up Python, and try to import quickfix...

Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import quickfix as qf
Traceback (most recent call last):
  File "C:\Python37\lib\site-packages\quickfix.py", line 18, in swig_import_helper
    return importlib.import_module(mname)
  File "C:\Python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 583, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1043, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: The specified module could not be found.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python37\lib\site-packages\quickfix.py", line 21, in <module>
    _quickfix = swig_import_helper()
  File "C:\Python37\lib\site-packages\quickfix.py", line 20, in swig_import_helper
    return importlib.import_module('_quickfix')
  File "C:\Python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ImportError: DLL load failed: The specified module could not be found.

Can someone please assist in providing direction on how to install quickfix on Windows?

...However, I did hear that quickfix is not necessarily meant for Windows and is much better suited in a Linux environment. I have tried running the pip install in CentOs, making sure I had all the dependencies, development tools, and correct version of Python installed. Still, no luck....

Getting the following error in CentOS:

[nickn@new-host bin]$ sudo pip install quickfix
Collecting quickfix
  Using cached quickfix-1.15.1.tar.gz (1.5 MB)
Using legacy 'setup.py install' for quickfix, since package 'wheel' is not installed.
Installing collected packages: quickfix
    Running setup.py install for quickfix ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python2 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nJvzBo/quickfix/setup.py'"'"'; __file__='"'"'/tmp/pip-install-nJvzBo/quickfix/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-4Bp3Vy/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python2.7/quickfix
         cwd: /tmp/pip-install-nJvzBo/quickfix/
    Complete output (38 lines):
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-x86_64-2.7
    copying quickfix.py -> build/lib.linux-x86_64-2.7
    copying quickfixt11.py -> build/lib.linux-x86_64-2.7
    copying quickfix40.py -> build/lib.linux-x86_64-2.7
    copying quickfix41.py -> build/lib.linux-x86_64-2.7
    copying quickfix42.py -> build/lib.linux-x86_64-2.7
    copying quickfix43.py -> build/lib.linux-x86_64-2.7
    copying quickfix44.py -> build/lib.linux-x86_64-2.7
    copying quickfix50.py -> build/lib.linux-x86_64-2.7
    copying quickfix50sp1.py -> build/lib.linux-x86_64-2.7
    copying quickfix50sp2.py -> build/lib.linux-x86_64-2.7
    running build_ext
    Testing for std::tr1::shared_ptr...
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DPYTHON_MAJOR_VERSION=2 -IC++ -I/usr/include/python2.7 -c test_std_tr1_shared_ptr.cpp -o test_std_tr1_shared_ptr.o
    ...found
    Testing for std::shared_ptr...
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -std=c++0x -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -IC++ -I/usr/include/python2.7 -c test_std_shared_ptr.cpp -o test_std_shared_ptr.o
    ...found
    Testing for std::unique_ptr...
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -std=c++0x -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -DHAVE_STD_SHARED_PTR -IC++ -I/usr/include/python2.7 -c test_std_unique_ptr.cpp -o test_std_unique_ptr.o
    ...found
    building '_quickfix' extension
    creating build/temp.linux-x86_64-2.7
    creating build/temp.linux-x86_64-2.7/C++
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -DHAVE_STD_SHARED_PTR -DHAVE_STD_UNIQUE_PTR -IC++ -I/usr/include/python2.7 -c C++/HttpServer.cpp -o build/temp.linux-x86_64-2.7/C++/HttpServer.o -std=c++0x -Wno-deprecated -Wno-unused-variable -Wno-deprecated-declarations -Wno-maybe-uninitialized
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -DHAVE_STD_SHARED_PTR -DHAVE_STD_UNIQUE_PTR -IC++ -I/usr/include/python2.7 -c C++/TimeRange.cpp -o build/temp.linux-x86_64-2.7/C++/TimeRange.o -std=c++0x -Wno-deprecated -Wno-unused-variable -Wno-deprecated-declarations -Wno-maybe-uninitialized
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -DHAVE_STD_SHARED_PTR -DHAVE_STD_UNIQUE_PTR -IC++ -I/usr/include/python2.7 -c C++/ThreadedSSLSocketAcceptor.cpp -o build/temp.linux-x86_64-2.7/C++/ThreadedSSLSocketAcceptor.o -std=c++0x -Wno-deprecated -Wno-unused-variable -Wno-deprecated-declarations -Wno-maybe-uninitialized
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -DHAVE_STD_SHARED_PTR -DHAVE_STD_UNIQUE_PTR -IC++ -I/usr/include/python2.7 -c C++/ThreadedSocketInitiator.cpp -o build/temp.linux-x86_64-2.7/C++/ThreadedSocketInitiator.o -std=c++0x -Wno-deprecated -Wno-unused-variable -Wno-deprecated-declarations -Wno-maybe-uninitialized
    gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -DPYTHON_MAJOR_VERSION=2 -DHAVE_STD_TR1_SHARED_PTR -DHAVE_STD_SHARED_PTR -DHAVE_STD_UNIQUE_PTR -IC++ -I/usr/include/python2.7 -c C++/QuickfixPython.cpp -o build/temp.linux-x86_64-2.7/C++/QuickfixPython.o -std=c++0x -Wno-deprecated -Wno-unused-variable -Wno-deprecated-declarations -Wno-maybe-uninitialized
    C++/QuickfixPython.cpp:175:21: fatal error: Python.h: No such file or directory
     # include <Python.h>
                         ^
    compilation terminated.
    error: command 'gcc' failed with exit status 1
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/bin/python2 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nJvzBo/quickfix/setup.py'"'"'; __file__='"'"'/tmp/pip-install-nJvzBo/quickfix/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-4Bp3Vy/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python2.7/quickfix Check the logs for full command output.

Now I understand that the CentOs error is around Python2, however, I have both python version installed in CentOs and the links pointing to a correct location.

At this point I would even take quickfix to work on my refrigerator using Python1.... Please assist.


Solution

  • FIGURED IT OUT!!!

    Windows Solution:

    The root cause of failure to import the module (while the installing the wheel file worked) was due to missing Visual C++ Redistributable for Visual Studio 2015. This was removed in my attempts to clean up disk space on my PC by removing the "bloatware". However, since QuickFIX is written in C++, you are required to have both the Microsoft Visual C++ Redistributable and the Microsoft Visual Compiler installed. Once everything was downloaded, I could immediately import quickfix without any issues.

    C:\Users\NickN>python
    Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import quickfix as qf
    >>>
    

    Links for quickfix: https://www.lfd.uci.edu/~gohlke/pythonlibs/#quickfix

    Video Walkthrough of install: https://www.youtube.com/watch?v=pAlrGJDvyYg&list=PLv-cA-4O3y95np0YK9NrKqNKLsORaSjBc&index=10

    ...and of course, check to make sure you have the Microsoft C++ executables installed!