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.
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!