Napisano 16 Październik 201212 l Witam Chciałbym do swojego skryptu zaimportować inny plik .py by odczytać z niego część kodu. Robię to w ten sposób: from .properties_animviz.py import ( MotionPathButtonsPanel, OnionSkinButtonsPanel, ) i otrzymuję komunikat: ValueError: Attempted relatvie import in non-package Jak można rozwiązać ten problem?
Napisano 16 Październik 201212 l potrzebujesz __init__.py w swoim directory, bez niego python nie traktuje twojego dir'a jako paczki (package) i nie może poprawnie odczytać odnośników. http://stackoverflow.com/questions/5497951/attempted-relative-import-in-non-package
Napisano 16 Październik 201212 l Autor A co to jest ten "__init__" mam to wstawić gdzieś w kodzie, czy to chodzi o umieszczenie gdzieś jakiegoś pliku?
Napisano 16 Październik 201212 l __init__.py to trochę jak index.html w HTML. Musi znajdować się w głównym folderze, do którego się odnosisz, możesz w nim umieścić kod swojego głównego .py, ale może to być po prostu pusty plik w tym samym folderze co główny .py. blabla/nazwa/__init__.py blabla/nazwa/modul.py i możesz importować te moduły: import nazwa.modul from nazwa import modul __init__.py może być pusty, ale jak coś w nim umieścisz, możesz się do niego dostać poprzez: import nazwa Edytowane 16 Październik 201212 l przez n-pigeon
Napisano 16 Październik 201212 l Autor Chyba czegoś tu nie rozumiem. Stworzyłem plik __init__.py, zapisałem go w folderze z plikiem "properties_animviz.py". W pliku __init__.py wstawiłem kod: import properties_animviz.modul i otrzymuje error: ImportError: No module named properties_animviz
Napisano 16 Październik 201212 l "modul" to mój przykład i po prostu nazwa modulu, możesz go nazwać jak chcesz spójrz na przykład, to co jest przed .modul to nie plik, a nazwa folderu. powinno być tak dir/koza/__init__.py dir/koza/properties_animviz.py jeśli coś importujesz z properties_animviz.py, to piszesz: import koza.properties_animviz jeśli wewnątrz __init__.py chcesz coś zaimportować możesz napisać from . import properties_animviz Tutaj masz dokumentacje: http://docs.python.org/py3k/reference/import.html#packages
Napisano 16 Październik 201212 l Autor to chyba jest zbyt ciężkie dla mnie, czytam te dokumentacje i nic nie rozumiem, zrobiłem tak jak mi piszesz czyli gdy mam foldery: panel/__init__.py panel/properties_animviz.py i wstawiam taki kod: import panel.properties_animviz i mam błąd: Traceback : File "C:\Users\Kompot\Desktop\blender-skrypty\panel-animatora.blend\__init__", line 1, in ImportError: No module named panel.properties_animviz
Napisano 16 Październik 201212 l Nie, nie, to nie jest trudne, po prostu ja dupnie tłumacze, dokumentacja jest trudna do zrozumienia (dam Ci tutka ma przykłady to łatwiej przeanalizować), a tobie jeszcze nie styknęło o co chodzi. Główny skrypt znajduje się w folderze "pierwszy" nazywa się setup.py ma też pod folder o nazwie "drugi" w którym jest properties_animviz.py Wygląda to tak: pierwszy/ setup.py drugi/ __init__.py properties_animviz.py Odpalasz setup.py a w nim masz kod: import drugi.properties_animviz Tutaj masz tut z python.org: http://docs.python.org/py3k/tutorial/modules.html#packages Obczaj Blenderowy folder scripts/Addons, tam niektóre addony są w ich własnym folderze gdzie też mają __init__.py Najlepiej uczyć się czytając kod. Zrób może uproszczone skrypty na print() by przetestować. Edytowane 16 Październik 201212 l przez n-pigeon
Napisano 16 Październik 201212 l Autor No niby rozumem te strukturę tylko folderów i plików i to jak to jest przedstawione w dokumentacji, nawet zrobiłem dokładnie tak samo jak Ty napisałeś i mam znów ten sam błąd w consoli :/
Napisano 16 Październik 201212 l Sprawdź to, rozpakuj i odpal setup.py w zwykłej konsoli pythona (python3): http://www.wuala.com/n-pigeon/Scripts/public_scripts/ Napisz czy działa.
Napisano 17 Październik 201212 l Autor dzięki, nie wiem czy zajmę się tym w tym tygodniu, ale jak sprawdzę to dam znać
Napisano 26 Październik 201212 l Autor Ok, zainstalowałem konsole pythona, odpaliłem skrypt i pięknie ładnie działa.... No dobra a czemu mi to w blenderze nie działa? :P
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto