Skocz do zawartości

Featured Replies

Napisano

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?

  • Odpowiedzi 11
  • Wyświetleń 2k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano
  • Autor

A co to jest ten "__init__" mam to wstawić gdzieś w kodzie, czy to chodzi o umieszczenie gdzieś jakiegoś pliku?

Napisano

__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 przez n-pigeon

Napisano
  • 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

"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
  • 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

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 przez n-pigeon

Napisano
  • 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
  • Autor

dzięki, nie wiem czy zajmę się tym w tym tygodniu, ale jak sprawdzę to dam znać

Napisano
  • 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

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności