Einstellungen zum Testen von C ++ 11 Python-Modulen mit Travis CI

Wenn ich versuche, ein mit Cython erstelltes Python-Modul mit Travis CI zu testen, sieht die Installation wie folgt aus. Es war.

$ python setup.py build install
running build
running build_ext
building 'neologdn' extension
creating build
creating build/temp.linux-x86_64-2.6
gcc -pthread -fno-strict-aliasing -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/opt/python/2.6.9/include/python2.6 -c neologdn.cpp -o build/temp.linux-x86_64-2.6/neologdn.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for Ada/C/ObjC but not for C++ [enabled by default]
In file included from /usr/include/c++/4.6/unordered_map:35:0,
                 from neologdn.cpp:255:
/usr/include/c++/4.6/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
neologdn.cpp:663:8: error: ‘unordered_map’ in namespace ‘std’ does not name a type
neologdn.cpp:666:8: error: ‘unordered_set’ in namespace ‘std’ does not name a type

Dies ist auf das Fehlen von "std :: unordered_map" und "std :: unordered_set" zurückzuführen, da die gcc-Version (4.6) von Travis CI alt ist und C ++ 11 nicht unterstützt. Lassen Sie uns gcc und g ++ mit .travis.yml aktualisieren und CFLAGS setzen.

install:
  - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
  - sudo apt-get update -qq
  - sudo apt-get install -qq gcc-4.8
  - sudo apt-get install -qq g++-4.8
  - export CC="gcc-4.8"
  - export CXX="g++-4.8"
  - export CFLAGS=-std=c++11
  - export CXXFLAGS=-std=c++11
  - python setup.py build install

Und wenn Sie C ++ 11 explizit in setup.py angeben, werden nicht nur Travis, sondern alle glücklich sein.

setup(
...
    ext_modules=[Extension('hoge', ['hoge.cpp'], language='c++', extra_compile_args=["-std=c++11"])],
...

Alternativ können Sie in Cython wie folgt angeben, dass sich "unordered_map" in "tr1" befindet:


# from https://github.com/ikuyamada/cython-cpp-experiment/blob/master/unordered_map.pxd
from libcpp.utility cimport pair
 
cdef extern from "<tr1/unordered_map>" namespace "std::tr1":
    cdef cppclass unordered_map[T, U]:
        cppclass iterator:
            pair[T, U]& operator*() nogil
            iterator operator++() nogil
            iterator operator--() nogil
            bint operator==(iterator) nogil
            bint operator!=(iterator) nogil
        unordered_map()
        unordered_map(unordered_map&)
        U& operator[](T&) nogil
        # unordered_map& operator=(unordered_map&)
        U& at(T&) nogil
        iterator begin() nogil
        void clear() nogil
        size_t count(T&) nogil
        bint empty() nogil
        iterator end() nogil
        pair[iterator, iterator] equal_range(T&) nogil
        void erase(iterator) nogil
        void erase(iterator, iterator) nogil
        size_t erase(T&) nogil
        iterator find(T&) nogil
        pair[iterator, bint] insert(pair[T, U]) nogil
        iterator insert(iterator, pair[T, U]) nogil
        void insert(input_iterator, input_iterator)
        size_t max_size() nogil
        void rehash(size_t)
        size_t size() nogil
        void swap(unordered_map&) nogil

Recommended Posts

Einstellungen zum Testen von C ++ 11 Python-Modulen mit Travis CI
Grundeinstellungen für die Verwendung von Python3.8 und pip unter CentOS8
Snippet-Einstellungen für Python Jupyter Notebook
Python-Spickzettel (für C ++ erfahren)
Emacs-Einstellungen für die Python-Entwicklungsumgebung
Installieren Sie Confluent-Kafka für Python unter Ubuntu
Rufen Sie C / C ++ von Python auf dem Mac auf
Hinweise zur Verwendung von OpenCV mit Windows 10 Python 3.8.3.
[Python] Automatisieren Sie Pelican Builds mit Travis CI
Führen Sie Python-Code unter C ++ aus (mit Boost.Python).
Anmerkung von nfc.ContactlessFrontend () von nfcpy von Python
Die Einstellung für die Amateur-Python-Umgebung (für MAC) wird erstellt
[C] [Python] Lesen mit AquesTalk unter Linux
Installieren Sie CVXOPT, NumPy, SciPy auf Travis CI
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Eine Einführung in Python für C-Sprachprogrammierer
Anweisungen zum schnellen Veröffentlichen einer C ++ - Python-Bibliothek mit pybind11 auf Github
(Windows) Ursachen und Problemumgehungen für UnicodeEncodeError in Python 3
Einstellungen zum lokalen Hochladen von Python-Paketen auf PyPI
Führen Sie Python YOLOv3 in C ++ unter Visual Studio 2017 aus
Wickeln Sie C mit Cython für Python ein
Tweet (API 1.1) mit Google App Engine für Python
Protokollierungseinstellungen für die tägliche Protokollrotation mit Python
Hinweis zur Codierung bei LANG = C in Python
Boost.NumPy Tutorial zum Erweitern von Python in C ++ (Übung)
Ein Memorandum zum Berühren von Python Flask mit Heroku
[Python / Chrome] Grundeinstellungen und Operationen zum Scraping
Einstellungen für die Python-Codierung mit Visual Studio-Code
Wrap C ++ mit Cython zur Verwendung von Python
Installieren von TensorFlow unter Windows Easy für Python-Anfänger
[Visual Studio Code] [Python] Tasks.json + problemMatcher-Einstellungen für Python
Astro: Häufig verwendete Python-Module / -Funktionen zur Analyse
Installieren Sie Python und Bibliotheken für Python unter MacOS Catalina
Einstellungen für den Einstieg in MongoDB mit Python