Frage

Wie kompilieren ich ein C-Python-Modul, so dass es zu einem anderen lokalen? Z.B. wenn ich ein Modul „bar“ genannt und ein weiteres Modul „mymodule“ genannt, wie kann ich „bar“ zu kompilieren, so dass er über „Import mymodule.bar“ importiert?

(Sorry, wenn dies schlecht formuliert ist, war ich nicht sicher, was die richtige Bezeichnung für sie war.)

Ich habe versucht, die folgenden in setup.py, aber es scheint nicht zu funktionieren:

from distutils.core import setup, Extension

setup(name='mymodule',
      version='1.0',
      author='Me',
      ext_modules=[Extension('mymodule', ['mymodule-module.c']),
                   Extension('bar', ['bar-module.c'])])

Bearbeiten

Danke Alex. So ist das, was ich am Ende mit:

from distutils.core import setup, Extension

PACKAGE_NAME = 'mymodule'

setup(name=PACKAGE_NAME,
      version='1.0',
      author='Me',
      packages=[PACKAGE_NAME],
      ext_package=PACKAGE_NAME
      ext_modules=[Extension('foo', ['mymodule-foo-module.c']),
                   Extension('bar', ['mymodule-bar-module.c'])])

mit natürlich ein Ordner mit dem Namen "mymodule" enthalten __init__.py.

War es hilfreich?

Lösung

Die Anweisungen sind hier :

  

Extension ( 'foo', [ 'src / foo1.c',   'Src / foo2.c'])

     

beschreibt eine Erweiterung, die lebt in   das Wurzelpaket, während

     

Extension ( 'pkg.foo' [ 'src / foo1.c',   'Src / foo2.c'])

     

beschreibt die gleiche Ausdehnung in der   PKG-Paket. Die Quelldateien und   Objektcode resultieren, sind identisch in der   beide Fälle; der einzige Unterschied ist,   wobei in dem Dateisystem (und deshalb   wo in Python Namespace-Hierarchie)   die resultierende Verlängerung lebt.

Denken Sie daran, ein Paket ist immer ein Verzeichnis (oder Zip-Datei) ein Modul __init__ enthält. Um ein Modul zu erstellen, die ein Paket Körper ist, wird dieses Modul aufgerufen wird __init__ und lebt unter dem Paketverzeichnis (oder ZIP-Datei). Ich habe noch nie, dass in C durchgeführt; wenn es nicht funktioniert es direkt zu tun, benennen Sie das Modul zum Beispiel _init statt und in __init__.py tun from _init import *. (eines der wenigen legitimen Nutzungen von from ... import *; -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top