Napisałem moduł ( my_mod.py
plik znajdujący się w folderze my_module
). Obecnie pracuję na pliku cool_script.py
znajdującym się w folderze cur_proj
. Otworzyłem folder w PyCharm za pomocą File - open (i zakładam, że jest to projekt PyCharm).
W ProjectView (CMD-7) widzę swój projekt cur_proj
(na czerwono), a pod „Bibliotekami zewnętrznymi” widzę my_module
. W cool_script.py mogę pisać
from my_module import my_mod as mm
a PyCharm sugeruje nawet my_mod. Na razie w porządku.
Jednak gdy próbuję uruchomić cool_script.py, PyCharm mówi mi „Żaden moduł o nazwie my_module”
Wydaje mi się to dziwne, ponieważ
A) w terminalu (OS 10.10.2), w pythonie mogę zaimportować moduł bez problemu - jest odpowiedni wpis w PYTHONPATH w .bashrc
B) w PyCharm - Ustawienia - Projekt cur_proj - Interpreter projektu - Koło zębate obok interpretera Pythona - więcej - pokazuje ścieżki dla wybranej ikony interpretera, pojawiają się ścieżki z PYTHONPATH (tak jak myślę, że powinny)
W związku z tym, dlaczego pojawia się błąd, gdy próbuję uruchomić cool_script.py? - Czego mi brakuje?
Uwagi:
- Nie deklaruję innej / specjalnej wersji Pythona na początku cool_script.py
- Upewniłem się, że ścieżka do
my_module
jest prawidłowa - I umieścić
__init__.py
pliki (puste pliki) zarówno wmy_module
oraz wcur_proj
- Nie używam
virtualenv
Dodatek 2015-luty-25
Kiedy przechodzę do PyCharm, aby uruchomić - Edytuj konfiguracje, dla mojego bieżącego projektu są dwie opcje zaznaczone znacznikiem wyboru: „ Dodaj katalogi główne zawartości do PYTHONPATH ” i „ Dodaj katalogi źródłowe do PYTHONPATH ”. Po odznaczeniu obu mogę załadować mój moduł.
Więc teraz działa - ale dlaczego ?
Pojawiły się dalsze pytania:
- Co to są „korzenie zawartości”, a co „źródła źródłowe”? I dlaczego dodanie czegoś do PYTHONPATH powoduje jej awarię?
- czy powinienem zawsze odznaczać obie te opcje (a więc również w ustawieniach domyślnych, nie tylko w konfiguracjach specyficznych dla projektu (lewy panel okna dialogowego Uruchom / debuguj konfiguracje)?
from foldername.mymodule import mymethod
. Kolejną rzeczą, którą musiałem zrobić, jest dodanie pustego folderu _init .py do wszystkich folderów, których używałbyś, aby dostać się do swojego modułu, więc w przypadku,from parentfolder.childfolder.mymodule ...
gdybyś potrzebował init w dwóch folderach. W zależności od tego, gdzie znajdują się foldery względem siebie, może być potrzebny pakiet najwyższego poziomu,sys.path
zgodnie z opisem w tej odpowiedziEnable Django Support
w ustawieniachLanguages & Frameworks -> Django
w wersji Pro PyCharm. To było otwarcie konsoli django, która spowodowała problemy z importem.Odpowiedzi:
Jeśli twój własny moduł znajduje się na tej samej ścieżce, musisz oznaczyć ścieżkę jako
Sources Root
. W eksploratorze projektów kliknij prawym przyciskiem myszy katalog, który chcesz zaimportować. Następnie wybierzMark Directory As
i wybierzSources Root
.Mam nadzieję, że to pomoże.
źródło
__init__.py
aby Python traktował katalogi jako zawierające pakiety: stackoverflow.com/questions/448271/ ....
przed nazwą pakietu, aby określić, że ten pakiet jest pakietem lokalnymWięc jeśli pójdziesz do
-> Ustawienia -> Projekt: Mój_projekt -> Struktura projektu,
Po prostu katalog, w którym dostępny jest kod źródłowy i oznacz go jako „Źródła” (możesz go zobaczyć w tym samym oknie). Katalog z kodem źródłowym powinien zmienić kolor na niebieski. Teraz możesz importować moduły znajdujące się w tym samym katalogu.
źródło
PyCharm Community / Professional 2018.2.1
Miałem ten problem właśnie teraz i udało mi się go rozwiązać w podobny sposób, jak wskazali @Beatriz Fonseca i @Julie.
Jeśli przejdziesz do
File
->Settings
->Project: YourProjectName
->Project Structure
, będziesz mieć układ katalogu projektu, w którym aktualnie pracujesz. Będziesz musiał przejrzeć swoje katalogi i oznaczyć je jakoSource
katalog dla wszystkich plików źródłowych lub jakoResource
folder na pliki przeznaczone wyłącznie do importowania.Będziesz także chciał upewnić się, że umieszczasz
__init__.py
pliki w katalogach zasobów lub naprawdę w dowolnym miejscu, z którego chcesz importować, i będzie działać idealnie.Mam nadzieję, że ta odpowiedź komuś pomoże i mam nadzieję, że JetBrains naprawi ten irytujący błąd.
źródło
Mark Directory as
z menu kontekstowego i wybierzSources Root
.Próbowałem znaleźć lokalizację, w której znajdują się moje pliki.
na przykład
E:\git_projects\My_project\__init__.py is my location.
Poszedłem do File -> Setting -> Project: My_project -> Project Structure i dodałem katalog główny zawartości do miejsca wzmianki
E:\git_projects\My_project
to działało dla mnie.
źródło
/home/my_user/git_projects/this_git_project/this_pycharm_project/
. Dodałem/home/my_user/git_projects/this_git_project/
jako katalog główny zawartości i/home/my_user/git_projects/this_git_project/this_pycharm_project/
jako jedyny folder źródłowy i wszystko w końcu się udało.my_module
jest folderem, a nie modułem i nie możesz zaimportować folderu, spróbuj przenieść sięmy_mod.py
do tego samego folderu,cool_script.py
a następnie zróbimport my_mod as mm
. Dzieje się tak, ponieważ Python szuka tylko w bieżącym katalogu isys.path
nie znajdzie,my_mod.py
chyba że znajduje się w tym samym kataloguMożesz też poszukać tutaj odpowiedzi, która mówi, jak importować z innych katalogów.
Co do innych pytań, nie wiem, ponieważ nie używam PyCharm.
źródło
Pojawił się również błąd dotyczący „Dodaj korzenie źródłowe do PYTHONPATH”. Mój problem polegał na tym, że miałem dwa foldery o tej samej nazwie, na przykład
project/subproject1/thing/src
iproject/subproject2/thing/src
i miałem oba oznaczone jako źródłowy katalog główny. Kiedy zmieniłem nazwę jednego z"thing"
folderów na"thing1"
(dowolna unikalna nazwa), zadziałało.Może jeśli PyCharm automatycznie dodaje wybrane źródła źródłowe, nie używa pełnej ścieżki i dlatego miesza foldery o tej samej nazwie.
źródło
Może to być spowodowane tym, że interpreter języka Python nie może znaleźć Twojego kodu. Musisz wyraźnie wspomnieć o tym w Pythonie, aby znaleźć kod w tej lokalizacji.
Aby to zrobić:
sys.path.extend(['your module location'])
do konsoli Pythona.W Twoim przypadku:
Na początku napisz następujący kod:
Po napisaniu tej instrukcji możesz uruchomić następujące polecenie:
źródło
Kluczowym mylącym krokiem, który należy wykonać, jest ponowne utworzenie konfiguracji uruchamiania dla pliku źródłowego, który próbujesz wykonać, tak aby IDE pobierało nowe ścieżki.
Sposób, który faktycznie zadziałał, to przejście do Run / Edit Configurations ..., wybierz konfigurację dla pliku, który próbujesz uruchomić po lewej stronie, odznacz pole „Dodaj źródłowe korzenie do PYTHONPATH”, zapisz, a następnie wróć, zaznacz pole i zapisz. WTEDY to zadziała.
źródło
Invalidate Cache/Restart
dwa razy!Katalogi główne zawartości to foldery zawierające kod projektu, podczas gdy katalogi źródłowe są zdefiniowane jako takie same. Jedyną różnicą, którą zrozumiałem, było to, że kod w źródłowych korzeniach jest zbudowany przed kodem w katalogu głównym zawartości.
Odznaczenie ich nie wpłynęłoby na środowisko wykonawcze do momentu, w którym nie tworzysz oddzielnych modułów w swoim pakiecie, które są ręcznie podłączane do Django. Oznacza to, że jeśli którykolwiek z twoich plików nie zawiera 'from django import ...' lub żadna z funkcji nie jest wywoływana przez django, odznaczenie tych dwóch opcji spowoduje nieprawidłowe działanie.
Aktualizacja - problem pojawia się tylko podczas korzystania z Virtual Environmanet i tylko podczas sterowania projektem za pośrednictwem dostarczonego terminala. Ponieważ terminal nadal działa przez domyślny pyhtonpath systemowy, a nie wirtualny env. podczas gdy panel sterowania python django działa dobrze.
źródło
Rozwiązaniem tego problemu bez konieczności oznaczania katalogu jako źródła źródłowego jest edycja konfiguracji uruchamiania iw wykonaniu wybierz opcję „Przekieruj dane wejściowe z” i wybierz skrypt, który chcesz uruchomić. To działa, ponieważ jest wtedy traktowane tak, jakby skrypt był uruchamiany interaktywnie w tym katalogu. Jednak Python nadal będzie oznaczał nazwę modułu błędem „brak modułu o nazwie x”:
Kiedy interpreter wykonuje instrukcję import, szuka x.py na liście katalogów zebranych z następujących źródeł:
źródło
Pycharm 2017.1.1
View->ToolBar
&View->Tool Buttons
Project
byłby widoczny, kliknij prawym przyciskiem myszy i naciśnij,Autoscroll to source
a następnie uruchom kod.To zadziałało dla mnie.
źródło
ln -s. someProject
Jeśli masz someDirectory / someProjectDir i dwa pliki, plik1.py i plik2.py, a plik1.py spróbuje zaimportować z tym wierszem
z jakiegoś pliku importuProjectDir 2
To nie zadziała, nawet jeśli wyznaczyłeś someProjectDir jako katalog źródłowy, a nawet jeśli jest on wyświetlany w preferencjach, projekcie, menu struktury projektu jako katalog główny zawartości. Jedynym sposobem, w jaki to zadziała, jest połączenie projektu, jak pokazano powyżej (polecenie unix, działa w systemie Mac, brak pewności użycia lub składni w systemie Windows). Wydaje się, że istnieje mechanizm, w którym Pycharm robi to automatycznie albo przy pobieraniu z kontroli wersji, albo dodając jako kontekstowy katalog główny, ponieważ miękki link został utworzony przez Pycharm w zależnym projekcie. Stąd po prostu skopiowanie tego samego, chociaż dziwna replikacja katalogu jest denerwująca, a konieczność jest kłopotliwa. Również w zależności, w której utworzono automatycznie, nie jest wyświetlany jako nowy katalog pod kontrolą wersji. Być może porównanie plików .idea ujawni więcej.
źródło
Odpowiedź, która dla mnie zadziałała, była rzeczywiście tym, o czym OP wspomina w swojej aktualizacji 2015: odznacz te dwa pola w konfiguracji uruchamiania Pythona:
Miałem już ustawioną konfigurację uruchamiania, aby używać właściwego venv, więc PyCharm wykonywanie dodatkowej pracy w celu dodania rzeczy do ścieżki nie było konieczne. Zamiast tego powodował błędy.
źródło