Python + Cython

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
fridolin
User
Beiträge: 1
Registriert: Dienstag 27. Oktober 2020, 21:56

Hallo alle zusammen,
ich bin noch relativ unerfahren in der Python Welt und möchte mich dennoch dem Thema Python in Kombi mit C/C++ nähern.
Dafür bin ich das Tutorial https://pythonprogramming.net/introduct ... -tutorial/ durchgegangen und habe es so zum Testen auch nachgemacht. (Ich arbeite am MacBook, habe die Version Python3 und für C Xcode)
Bis zum letzten Schritt mit dem testing.py File bin ich gekommen, bis da hat alles geklappt, aus der example_cython.pyx Datei wurden die build-, .c und .so Dateien entwickelt.
Beim Durchführen von testing.py kommt folgende Fehlermeldung:

Traceback (most recent call last):
File "/Users/Documents/testing.py", line 2, in <module>
import example_cython
ModuleNotFoundError: No module named 'example_cython'

Die Dateien example..., setup, testing habe ich aus dem Tutorial übernommen:

Setup File:

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('example_cython.pyx'))

Alles ist zusammen gespeichert in /user/Documents.
Ich verstehe nicht, warum dieser Fehler erscheint, kann mir also nicht erklären wie ich es besser machen kann.
Es könnte sein, dass ich bei den Pip Befehlen nicht für Python3 installiert habe, könnte es daran liegen? Oder ist das ein Fehler in der working directory (weiß nicht ob's da ein deutsches Wort für gibt) ?
Falls ich zu wenig Infos zu dem Ganzen gegeben habe sagt Bescheid, weiß nicht was da noch wichtig sein könnte.

Ich wäre über jede Hilfe/Tipps dankbar :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Author von Cython, Stefan Behnel, war früher sehr aktiv auf der deutschen Python Mailingliste. Ich bin da nicht mehr, darum weiß ich es nicht genau - aber da würde ich dir mal raten dein Problem zu schildern.
Thants
User
Beiträge: 34
Registriert: Dienstag 1. Dezember 2020, 12:00

Ich bin vielleicht etwas spät dran, aber vielleicht hilft es ja immer noch jemandem....
Wenn du die .so erfolgreich gebaut hast, hast du die größte Hürde ja schon genommen. Jetzt geht es nur noch darum, dass Python die .so auch findet, was bei dir offensichtlich nicht der Fall ist.

Falls du das Testprogramm aus dem Terminal heraus aufrufst, sollte das aktuelle Verzeichnis (working directory) dasjenige sein, wo sich das Testprogramm und die .so befindet. Falls du mehrere Python-Versionen installiert hast, musst du darauf achten, dass du das Testprogramm mit der gleichen Python-Version aufrufst, mit der du auch das setup.py-Skript aufgerufen hast.

Falls du gar nicht im Terminal bist (oder es immer noch nicht funktioniert), könntest du auch testweise den Pfad zum .so explizit zu den Suchpfaden hinzufügen, also in testing.py:

Code: Alles auswählen

import sys
sys.path.append("/Users/Documents")
sys.path ist eine Liste mit Pfaden, in denen Python nach Modulen suchst, wenn du etwas importierst. Die Zeile mit dem append() muss also vor dem Import von example_cython stehen.
(schau nochmal nach, ob /Users/Documents auch wirklich der richtige Pfad ist)
Antworten