2017-04-19 4 views
0

Ich kann mein Paket aus seinem Ordner verwenden, aber sobald ich es als Eipaket installiere, können Cython-basierte Module nicht importiert werden.Paket kann keine Cython-Bibliothek in das Ei importieren

Ich habe folgende Paketstruktur

src/ 
├── mypkg/ 
│ ├── __init__.py 
│ ├── myfile.py 
├── cython/ 
│ ├── fastcode.pyx 
setup.py 

Das Modul myfile.py Einfuhren import fastcode. In setup.py habe ich

setup(
    name='mypkg', 
    version='0.1', 
    packages=find_packages(where="src"), 
    package_dir={'':'src'}, 
    cmdclass={'build_ext': build_ext}, 
    ext_modules=df_ext_modules, 
) 

Ich habe auch in setup.cfg,

[build_ext] 
build-lib=src/mypkg 

Wenn ich python setup.py install laufen, wird der cython Code kompiliert und erstellt fastcode.pyd (oder fastcode.so in Linux) in mypkg Ordner entsprechend der Anweisung die Konfigurationsdatei.

Jetzt, wenn ich in den Ordner mypkg gehe, und python ausführen, kann ich sicher import mypkg.myfile tun. Wenn ich jedoch Python aus einem anderen Ordner ausführen (so dass die installierte .egg Datei verwendet wird) bekomme ich Fehler ImportError: No module named fastcode.

I

package_data={ 
    'mypkg': ['*.pyd', '*.so'] 
}, 

zu setup.py hinzuzufügen versucht, fügt dieser fastcode.pyd zum Ei-Datei (durch die entpackte Version zu erkunden), aber immer noch nicht funktioniert für den Import.

Antwort

0

Ich habe gefunden, wie es in meinem Fall zu beheben: musste setup.cfg entfernen. Für diejenigen, die daran interessiert sind, das Problem ist, dass mit der neuen Einrichtung, die .egg Datei enthält auch generiert fastcode.py Datei und fastcode.pyc Datei, nicht nur fastcode.pyd Datei (die ich erwarten würde, indem Sie auf mypkg nach den Kompilationen mit dem vorherigen Setup, wo nur .pyd Dateien waren vorhanden).

Verwandte Themen