2017-07-25 5 views
0

Ich habe eine kleine Hilfsfunktion test mit sensiblen Code. Um diesen Code zu maskieren, habe ich die Funktion in hello.pyx geschrieben und in meinem Paket mypackage verwendet.Cython: Kontrolle Cythonize zu stoppen, um kompilierte `.c` Datei aus` .pyx` Datei im Installationsverzeichnis

ich in der Lage bin zu bauen und zu nutzen, indem die setup.py für das Paket zu so etwas wie unten ändern:

import os                                    
from setuptools import setup, find_packages                           
from Cython.Build import cythonize                              
os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))                   

setup(                                    
    name='mypackage',                                 
    ext_modules = cythonize('mypackage/hello.pyx'),                        
    packages=find_packages(),                               
    include_package_data=True,                               
    ) 

Allerdings, wenn ich bauen/installieren Sie es über python setup.py oder pip install erzielte die cython hello.c sowie als hello.so im Installationsverzeichnis gestellt werden immer (in meinem Fall ~/.local/python2.7/site-packages/mypackage/)

ich die hello.c aus dem Verzeichnis manuell entfernen kann installieren (so dass nur die hello.so-Datei) und das Paket r Uns geht es gut.

Gibt es eine Möglichkeit, diesen Prozess zu automatisieren, so dass ich die kompilierte c Datei nicht manuell entfernen muss?

Ich schaute auf diese stackoverflow question. Allerdings bekomme ich einen Fehler während der Cythonize-Operation, wenn ich versuche, das Rad mit pip wheel . zu bauen. Auch in meinem Fall bin ich gut mit der Installation so lange mit tar.gz als die installierte Code nicht reine Textdateien enthält für hello.c

[Bearbeiten]

konnte ich eine .c Datei in stoppen Platzierung das Installationsverzeichnis mit include_package_data=False in meinem setup.py .. Allerdings bin ich nicht genau sicher, ob diese Option für nicht Python-Dateien im Projekt

+0

Haben Sie 'MANIFEST.in' in Ihrem Projektverzeichnis haben? Wenn ja, was enthält es? –

+0

Es gibt keine 'MANIFEST.in' .. btw nur aktualisiert die Frage – goofd

Antwort

2

bedeutet Wie beabsichtigen Sie, das Paket zu verteilen?

Ohne die .c Dateien in der Quelle distributable wird Cython eine Abhängigkeit für Ihr Projekt. Da Cython ein statischer Code-Generator ist, ist es nicht erforderlich nach die .c Dateien zu generieren.

Durch Einfügen in die Quelldistribution kann das Paket ohne Cython installiert werden, indem standardmäßige setuptools-Erweiterungen für die Dateien .c anstelle von cythonize für die Dateien .pyx verwendet werden.

Dies ist auch die Empfehlung in Cython documentation, die zeigt, wie man zwischen den beiden für die Entwicklung und Verteilung wechselt.

Wenn Sie sie wirklich ausschließen wollen und Cython eine Abhängigkeit zu machen, fügen Sie folgendes zu MANIFEST.in

exclude mypackage/*.c

+0

Ich bin in Ordnung mit Cython eine Abhängigkeit sein. Danke das funktioniert – goofd

Verwandte Themen