Trudno mi zrozumieć, jak działa importowanie modułów w Pythonie (nigdy wcześniej nie robiłem tego w żadnym innym języku).
Powiedzmy, że mam:
myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py
Teraz próbuję uzyskać coś takiego:
myapp.py
===================
from myapp import SomeObject
# stuff ...
TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject
Jednak zdecydowanie robię coś nie tak, ponieważ Python nie widzi, że myapp
jest to moduł:
ImportError: No module named myapp
import
w moim,TestCase.py
ale nadal dawało mi to ten sam błąd. Zakładam, że to dlatego, że znajduje się w podkatalogu__init__.py
?from ... import ...
prawa?from myapp.tests import TestCase from a script outside myapp. If you're running
python TestCase.py` w folderze testów, nie możesz wykonać importu względnegofrom fodername import file_name_of_my_py_code
, ale kiedy próbowałem uzyskać dostęp do zdefiniowanego wfile_name_of_my_py_code.py
niej obiektu, mówiNameError: name 'ClassName' is not defined
Funkcja
import
szuka plików w Twoim środowisku PYTHONPATH. zmienna i katalog lokalny. Możesz więc albo umieścić wszystkie swoje pliki w tym samym katalogu, albo wyeksportować ścieżkę wpisując do terminala:źródło
export
„set PYTHONPATH =% PYTHONPATH%; C: \ path_to_myapp \ myapp \ myapp \”ścieżka eksportu to dobry sposób. Innym sposobem jest dodanie .pth do lokalizacji pakietów witryn. Na moim Macu mój Python przechowuje pakiety witryn w / Library / Python pokazane poniżej
Utworzyłem plik o nazwie awesome.pth w /Library/Python/2.7/site-packages/awesome.pth i umieściłem w nim następującą ścieżkę, która odwołuje się do moich niesamowitych modułów
źródło
Możesz spróbować
ponieważ nazwa twojego projektu jest taka sama jak myapp.py, co powoduje, że najpierw przeszukuje dokument projektu
źródło
W swoim pierwszym katalogu myapp możesz dodać plik setup.py i dwa kody Pythona w setup.py
w swoim pierwszym katalogu myapp w linii poleceń użyj pip install -e. aby zainstalować pakiet
źródło
pip install
w systemie Windows 10 domyślnie instaluje się w „Program Files / PythonXX / Lib / site-packages”, który jest katalogiem wymagającym uprawnień administratora. Więc naprawiłem mój problem, uruchamiając pip install jako administrator (musisz otworzyć wiersz polecenia jako administrator, nawet jeśli jesteś zalogowany na konto administratora). Bezpieczniej jest też wywoływać pip z pythona.np.
python -m pip install <package-name>
zamiast
pip install <package-name>
źródło
W moim przypadku była to niespodzianka Windows vs Python, mimo że nazwy plików Windows nie uwzględniają wielkości liter, import Pythona jest. Więc jeśli masz
Stuff.py
plik, musisz zaimportować tę nazwę bez zmian.źródło
Musisz mieć
we wszystkich folderach, które zawierają kod, z którym musisz wejść w interakcję. Musisz także określić nazwę głównego folderu projektu w każdym imporcie, nawet jeśli plik, który próbujesz zaimportować, jest na tym samym poziomie.
źródło