2016-05-04 9 views
3

Ich habe ein Python-Modul module.pyd das funktioniert ziemlich gut, wenn es manuell auf die Site-Pakete von Python-Installationsordner gesetzt wird.Include * .pyd-Dateien in Python-Pakete

Das Problem beginnt, wenn ich meine Lösung in eine Cloud-Umgebung hochladen, fordert das Buildpack, dass ich jedes Modul als ein Paket mit pip install module installiert übergeben. Ich habe einen Ordner mit einer einfachen __init__.py Datei erstellt, die nur alles von module.pyd importiert, so dass mein Modul wie ein Ordner behandelt wird.

Dann lese ich hier http://peterdowns.com/posts/first-time-with-pypi.html wie ich mein eigenes Modul hochladen und ich erfolgreich, aber wenn ich mein Modul installieren, wird die module.pyd Datei nicht kopiert. Ich habe auch versucht, es direkt durch das Repository pip install git+repository zu installieren, aber das Gleiche ist passiert.

Ich habe hier gelesen https://docs.python.org/2/distutils/sourcedist.html#specifying-the-files-to-distribute, die ich ausdrücklich haben könnte zu sagen, dass ich * .pyd Dateien in einer MANIFEST.in Datei kopiert werden soll, ich habe es getan, aber es scheint noch nicht funktioniert.

ich zur Zeit mit Python 2.7.10

: Ich bin auf Python so d Ich schätze ihr helfen

+0

Nicht viel, das macht Sinn, leider. Warum möchten Sie die eigentlichen .py-Dateien nicht verteilen? Warum müssen Sie es in Site-Pakete einfügen, anstatt in Ihr Projekt selbst, wenn es sich um Ihren eigenen Code handelt? –

+0

@ daniel-roseman Eigentlich habe ich nicht die Py-Dateien dieses Moduls (es ist eine C++ - Kompilierung, denke ich). Ich möchte es nur als Distribution oder zumindest in einem Repository platzieren, damit das Buildpack der Cloud-Umgebung darauf zugreifen kann. Sobald das Modul installiert ist, wird die Datei "__init__.py" heruntergeladen, aber nicht die pyd-Datei. Ich habe bereits versucht, es zusammen mit der Lösung hochzuladen, aber ich weiß nicht warum, es funktioniert nicht –

Antwort

2

Nur die MANIFEST.in verwenden:

recursive-include module *.pyd 

Dazu gehören alle pyd Dateien in das Verzeichnis module.

Ihr Paket Layout folgendes sein sollte:

module/ 
--- __init__.py 
--- _module.pyd 
--- module.py 
MANIFEST.in 
README.rst 
setup.py 

Und vergessen Sie nicht, hinzuzufügen include_package_data=True in setup() in Ihrem setup.py um MANIFEST.in mit zu erzwingen, wenn Räder und win32 Installateure bauen (sonst MANIFEST.in nur sein verwendet für Quell-Tarball/Zip).

Minimal Beispiel setup():

README_rst = '' 
with open('README.rst', mode='r', encoding='utf-8') as fd: 
    README_rst = fd.read() 

setup(
    name='module', 
    version='0.0.1', 
    description='Cool short description', 
    author='Author', 
    author_email='[email protected]', 
    url='repo.com', 
    packages=['module'], 
    long_description=README_rst, 
    include_package_data=True, 
    classifiers=[ 
     # Trove classifiers 
     # The full list is here: https://pypi.python.org/pypi?%3Aaction=list_classifiers 
     'Development Status :: 3 - Alpha', 
    ] 
) 
+0

Können Sie näher erläutern, warum Sie 'module.py' und' _module.pyd' verwenden (warum fügen Sie die .py-Datei hinzu und benennen Sie die .pyd-Datei mit einem Unterstrich um)? – florisla

+0

@florisla ah es tut mir leid, es könnte in der Tat verwirrend sein, '_module.pyd' ist hier eine SWIG-generierte Python-Modul-Schnittstelle zu einem C++ - Programm, also gibt es keine Beziehung zwischen' _module.pyd' und 'module.py', würde es wahrscheinlich weniger verwirrend, die Pyd-Datei in '_core.pyd' umzubenennen. – gaborous

+0

Warum behalten Sie dann den Unterstrich? Sie möchten die * .pyd-Datei öffentlich machen, oder? – florisla