Skocz do zawartości

Import pliku .py


Rekomendowane odpowiedzi

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
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano (edytowane)

__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

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

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 (edytowane)

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

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 :/

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności