2013-01-22 15 views
7

Próbuję osadzić pythona w mojej aplikacji i utknąłem dość wcześnie.Osadzanie błędu Pythona Importowanie przez nazwę pliku nie jest obsługiwane

ja osadzanie Pythona w mojej aplikacji C++ i przy użyciu kodu znajdującego się w tym tutorialu: http://docs.python.org/2/extending/embedding.html#pure-embedding

Moja aplikacja pasuje do całości i kompiluje pomyślnie błędów. Jednak na uruchomienie aplikacji pModule = PyImport_Import(pName); linia zawiedzie powracającego 0 sens uzyskać wyjście błędu z PyErr_Print() z

Failed to load "C:\Users\workspace\dpllib\pyscript.py" 
ImportError: Import by filename is not supported. 

aplikacja jest wywoływana z poleceniami C:\Users\workspace\ndnlib\pyscript.py multiply 50 150

+0

Czy próbowałeś podwójnego ukośnika odwrotnego? \\ – imreal

+0

Próbowałem, ten sam błąd. – ceorron

+0

Które importy są używane w skrypcie Pythona? – imreal

Odpowiedz

7

nie mogę być pewny, ale ja” m myśląc, że skoro pName jest ustawione na argv [1] i używasz pełnej ścieżki do wywołania skryptu, wówczas argv [1] jest pełną ścieżką. Oznacza to, że kod spróbuje zaimportować "C: \ Users \ workspace \ dpllib \ pyscript.py", którego python nie może (może zaimportować tylko "pyscript").

Spróbuj uruchomić skrypt po prostu wpisując "pyscript.py" z katalogu i zobacz, czy błąd zmienia się na "Nie można załadować" pyscript.py "". Jeśli tak, to musisz to naprawić, aby nie zaimportować tylko argv [1] i zmodyfikować ciąg, aby uzyskać nazwę modułu zamiast nazwy pliku.

+1

Tak, dostałem to tak jak podczas pisania, plik musi być lokalny dla exe. To samo, katalog nawet w podkatalogu! Nie może mieć rozszerzenia .py. Dzięki i tak – ceorron

+0

Edytuj podkatalogi są dozwolone, ale po prostu wczytaj "pyscript" i wyszukiwanie jest dla ciebie. – ceorron

+0

Na Ubuntu próbuje uruchomić go bezpośrednio doprowadził do błędu uprawnień, naprawiono za pomocą "chmod + x pyscript.py". Jednak w tym momencie utknęliśmy w "ImportError: Brak modułu o nazwie pyscript" –

0

Jest to prostsze, jeśli utworzysz plik jako moduł.

Na przykład

tworzyć to:

<project>/MyModule/__init__.py

Następnie uruchom plik <project>/script.py

dyn_module_name = (... get module name 'MyModule' from console arguments ...) 
my_dynamic_module = __import__(dyn_module_name) 

Ponieważ byłoby to moduł będzie ładować w czasie, gdy scripy.py wykonanie

Powiązane problemy