Ich hatte große Probleme beim Versuch, cvxopt auf der 64-Bit-Version von Anaconda unter Windows zu installieren, daher werde ich den Arbeitsinhalt zusammenfassen.
In der cvxopt-Dokumentation wird beschrieben, wie Sie es unter Windows installieren (http://cvxopt.org/install/index.html#building-cvxopt-for-windows). Beachten Sie jedoch, dass anscheinend die 32-Bit-Version von Python angenommen wird und laut Dokument nicht reibungslos installiert werden kann. Dieser Artikel fasst die Änderungen zusammen, die gemäß diesem Dokument vorgenommen werden müssen.
Es wird davon ausgegangen, dass diese bereits installiert sind.
Darüber hinaus sind die nachfolgenden Arbeiten in einem eigenen Verzeichnis durchzuführen. Wenn Sie dies beispielsweise in D: \ glpk
tun möchten, können Sie die Eingabeaufforderung wie folgt öffnen.
Dies kann gemäß Dokumentation erfolgen.
BLAS Laden Sie die [BLAS-Quelldatei] herunter (http://www.netlib.org/blas/blas.tgz). Führen Sie dann den folgenden Befehl an der Eingabeaufforderung aus.
$ tar -xvf blas.tgz
$ cd BLAS-3.5.0
$ sed 's/_LINUX/_WIN/' make.inc -i
$ make && cp blas_WIN.a ../libblas.a
$ cd ..
Der Verzeichnisname in der zweiten Zeile ändert sich jedoch je nach Version der erfassten BLAS-Quelldatei. Ersetzen Sie ihn daher entsprechend.
LAPACK Laden Sie [LAPACK-Quelldatei] herunter (http://www.netlib.org/lapack/lapack-3.5.0.tgz). Führen Sie dann den folgenden Befehl an der Eingabeaufforderung aus.
$ tar -xvf lapack-3.5.0.tgz
$ cd lapack-3.5.0
$ cp make.inc.example make.inc
$ make lapacklib && cp liblapack.a ..
$ cd ..
Wenn Ihnen mitgeteilt wird, dass "libquadmath-0.dll" nicht vorhanden ist, laden Sie es von hier und "MinGW / bin" herunter Platzieren Sie es in (es scheint standardmäßig
C: \ MinGW \ bin` zu sein) und führen Sie dann den obigen Befehl aus.
Ab hier ist die Produktion. Laden Sie [CVXOPT-Quelldatei] herunter (http://cvxopt.org/download). Führen Sie dann den folgenden Befehl an der Eingabeaufforderung aus. Der Dateiname und der Ordnername ändern sich je nach Version. Lesen Sie sie daher entsprechend.
$ tar -xvf cvxopt-1.1.8.tar.gz
$ cd cvxopt-1.1.8/src
Öffnen Sie setup.py
und
Bearbeiten Sie als Nächstes das Modul "cygwinccompiler" des Pakets "distutils". Wenn sich Anaconda in c: \ Anaconda
befindet, öffnen Sie c: \ Anaconda \ Lib \ distutils \ cygwinccompiler.py
. Wenn diese Datei eine Zeichenfolge "-mno-cygwin" enthält, löschen Sie diese. (Nicht in meiner Umgebung)
Die statischen Linux-Bibliotheken "libpython27.a" und "libmsvcr90.a", die für die spätere Verarbeitung erforderlich sind, werden nicht standardmäßig vorbereitet, sodass sie aus den Bibliotheken für Windows konvertiert werden.
Installieren Sie zunächst das Konvertierungstool.
$ mingw-get install pexports
Kopieren Sie anschließend "python27.dll" und "msvcr90.dll" im Anaconda-Verzeichnis (z. B. "c: \ Anaconda") in das Verzeichnis, in dem sich die setup.py von cvxopt befindet.
Führen Sie den folgenden Befehl aus, um "libpython27.a" zu erstellen.
$ pexports python27.dll > python27.def
$ dlltool --dllname python27.dll --def python27.def --output-lib libpython27.a
Das Erstellen von "libmsvcr90.a" ist etwas komplizierter. Zuerst,
$ pexports msvcr90.dll > msvcr90.def
Führen Sie die resultierende Datei "msvcr90.def" mit einem Texteditor aus und öffnen Sie sie. Und es ist in der Nähe der 304. bis 314. Linie,
--Ändern Sie die Zeile _decode_pointer
in; _decode_pointer
--Ändern Sie die Zeile _encode_pointer
in; _encode_pointer
Richtig. danach,
dlltool --dllname msvcr90.dll --def msvcr90.def --output-lib libmsvcr90.a
Wird ausgeführt. Kopieren Sie die fertigen Dateien "libpython27.a" und "libmsvcr90.a" in den Ordner "libs" von Anaconda. Wenn sich zu diesem Zeitpunkt "python27.lib" im Verzeichnis "libs" befindet, ändern Sie es in "python27.lib_".
Wenn der ursprüngliche Quellcode verwendet wird, tritt ein Fehler auf, sodass die folgende Datei geändert werden muss.
src/C/cholmod.c In der Nähe der 31. Linie
cholmod.c
/* defined in pyconfig.h */
#if (SIZEOF_INT < SIZEOF_LONG)
#define CHOL(name) cholmod_l_ ## name
#else
#define CHOL(name) cholmod_ ## name
#endif
Zu
cholmod.c
/* defined in pyconfig.h */
// #if (SIZEOF_INT < SIZEOF_LONG)
#define CHOL(name) cholmod_l_ ## name
// #else
// #define CHOL(name) cholmod_ ## name
// #endif
Korrigiert auf.
src/C/SuiteSparse/SuiteSparse_config/SuiteSparse_config.h Löschen Sie den folgenden Code in der Nähe von Zeile 155.
SuiteSparse_config.h
#ifndef NTIMER
#ifdef _POSIX_C_SOURCE
#if _POSIX_C_SOURCE >= 199309L
#define SUITESPARSE_TIMER_ENABLED
#endif
#endif
#endif
src/C/amd.c In der Nähe der Linie 27,
amd.c
#if (SIZEOF_INT < SIZEOF_LONG)
#define amd_order amd_l_order
#define amd_defaults amd_l_defaults
#endif
Zu
amd.c
//#if (SIZEOF_INT < SIZEOF_LONG)
#define amd_order amd_l_order
#define amd_defaults amd_l_defaults
//#endif
Korrigiert auf.
Zu diesem Zeitpunkt können Sie schließlich mit dem folgenden Befehl kompilieren.
$ python setup.py build --compiler=mingw32
Erstellen Sie zur Installation distutils.cfg
in Lib / distutils
von Anaconda und geben Sie den folgenden Inhalt ein.
distutils.cfg
[build]
compiler=mingw32
Dann installieren Sie es.
$ python setup.py install
Recommended Posts