2016-09-08 2 views
0

ich eine Verzeichnisstruktur wieInstallieren SWIGged Python-Bibliothek in dist-packages/myfoo.py, nicht dist-packages/myfoo/myfoo.py

setup.py 
myfoo/ 
    myfoo.i 
    myfoo.cpp 
    myfoo.hpp 

mit setup.py,

from distutils.core import setup, Extension 

setup(
    name='myfoo', 
    ext_modules=[ 
     Extension(
      '_myfoo', 
      [ 
       'myfoo/myfoo.cpp', 
       'myfoo/myfoo.i' 
      ], 
      swig_opts=['-c++'], 
      ) 
     ], 
    version='0.0.1', 
    packages=['myfoo'], 
    requires=[] 
    ) 

myfoo.hpp

#ifndef MYFOO_HPP 
#define MYFOO_HPP 

int myfoo(); 

#endif // MYFOO_HPP 
richtig

myfoo.cpp

#include "myfoo.hpp" 

#include <iostream> 

int myfoo() { 
    std::cout << "hey!" << std::endl; 
    return 42; 
} 

Wenn python setup.py install ausgeführt wird, baut das Paket und installiert die Dateien

/usr/local/lib/python2.7/dist-packages/ 
    _myfoo.so 
    myfoo/ 
     myfoo.py 
     myfoo.pyc 

standardmäßig nur /usr/local/lib/python2.7/dist-packages/ ist in der $PYTHONPATH, so import myfoo von überall ergibt sich ein Importfehler. Damit das funktioniert, sollten entweder beide myfoo.py[c] in /usr/local/lib/python2.7/dist-packages/ sein oder in __init__.py umbenannt werden. Es scheint, dass ich setup.py nicht richtig angerufen habe.

Irgendwelche Hinweise?

Antwort

0

Entfernen

packages=['myfoo'], 

und das Hinzufügen von

py_modules = ['myfoo'], 
package_dir = {'' : 'myfoo'} 

zu setup.py funktioniert der Trick.

+0

Statt '' package_dir'' ist es ausreichend 'py_modules' zu verwenden und' build_ext --inplace' hinzuzufügen, wenn 'setup.py' aufgerufen wird –