2017-08-03 2 views
0

Ich verwende Cython, um kompilierte .so-Dateien für ein paar Python-Module zu generieren, die ich habe. Wie outlined in the Cython documentation können Sie eine setup.py-Datei erstellen, wie folgt:Wie kann ich Python Distutils verwenden, um ein Erweiterungsmodul mit einer anderen Architektur zu kompilieren?

from distutils.core import setup 
from Cython.Build import cythonize 

setup(
    ext_modules = cythonize([ 
     'MyModule1.py', 
     'MyModule2.py', 
     'MyModule3.py' 
    ]) 
) 

und dann bauen die Module mit dem python3 setup.py build_ext --inplace Befehl.

Das funktioniert gut, aber es erstellt Binärdateien, die die Architektur der Host-Maschine (in meinem Fall x86_64) übereinstimmen. Ich möchte eine andere Architektur (armv7l) anvisieren, deren Kreuzkompilierung und Umgebung ich bereits habe. Ist es möglich, dies mit Python Distutils zu tun?

+1

Ich denke, Ihre beste Wette ist es, eine virtuelle Maschine mit emulierten Architektur zu betreiben und alle Werkzeuge nativ verfügbar zu haben. – phd

Antwort

1

Pass in einer alternativen march und verwandten Flags über extra_compile_args auf der Verlängerung:

sources = ['MyModule1.py', 
      'MyModule2.py', 
      'MyModule3.py'] 

ext_modules=cythonize(sources, 
         extra_compile_args=['-march=armv7l'], 
         library_dirs=[<arm v7 libraries>], 
         include_path=[<arm v7 includes>]) 

Benötigt Arbeits Build-Tool-Kette für armv7l.

Docker Container für einen Armv7l basierten Linux wäre wahrscheinlich einfacher zu bedienen, und würde den Arm bauen.

Wie in kann der Docker-Container in einem Skript erstellen und native Pakete für alle Architekturen und OS, die Sie möchten, generieren.

Verwandte Themen