Używam PyLint z wnętrza Wing IDE w systemie Windows. Mam podkatalog (pakiet) w swoim projekcie i wewnątrz pakietu importuję moduł z najwyższego poziomu, tj.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Wewnątrz two.py
mam import one
i to działa dobrze w czasie wykonywania, ponieważ katalog najwyższego poziomu (z którego myapp.py
jest uruchamiany) znajduje się w ścieżce Pythona. Jednak gdy uruchamiam PyLint na two.py, pojawia się błąd:
F0401: Unable to import 'one'
Jak to naprawić?
~/.pylintrc
pracował dla mnie na OSX, drugi nie działałexport PYTHONPATH
żeby topylint
zobaczyli (przynajmniej w bash / zsh)Rozwiązanie do zmiany ścieżki w
init-hook
jest dobre, ale nie podoba mi się fakt, że musiałem tam dodać ścieżkę bezwzględną, w wyniku czego nie mogę udostępnić tego pliku pylintrc twórcom projektu. To rozwiązanie wykorzystujące ścieżkę względną do pliku pylintrc działa lepiej dla mnie:Zauważ, że
pylint.config.PYLINTRC
również istnieje i ma taką samą wartość jakfind_pylintrc()
.źródło
.
(kropki).app
) możesz użyćfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path to lista.
2) Czasami problem polega na tym, że sys.path nie jest twoją virtualenv.path i chcesz użyć pylint w swoim virtualenv
3) Tak jak powiedziałem, użyj haka init (zwróć uwagę na 'i "analiza pylint jest ścisła)
lub
.. i
źródło
pylint
w moim virtualenv zgodnie z tą radą: plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
w swoim folderze domowym.Problem można rozwiązać, konfigurując ścieżkę pylint w venv: $ cat .vscode / settings.json
źródło
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
tylko kompletność.The setting "python.pythonPath" defined in your settings.json is now deprecated.
Jeśli usunępython.pythonPath
linię, nadal wydaje się, że działa.Czy masz pusty
__init__.py
plik w obu katalogach, aby Python wiedział, że katalogi są modułami?Podstawowy zarys, gdy nie korzystasz z folderu (tj. Może z pylinta, chociaż go nie używałem) to:
W ten sposób interpreter Pythona jest świadomy modułu bez odniesienia do aktualnego katalogu, więc jeśli pylint działa z własnej ścieżki bezwzględnej będzie w stanie uzyskać dostęp
functions_etc.py
jakotopdir.functions_etc
lubtopdir.subdir.other_functions
, jeżelitopdir
jest naPYTHONPATH
.AKTUALIZACJA: Jeśli problemem nie jest
__init__.py
plik, może po prostu spróbuj skopiować lub przenieść moduł doc:\Python26\Lib\site-packages
- jest to typowe miejsce do umieszczania dodatkowych pakietów i na pewno będzie na twojej ścieżce python. Jeśli wiesz, jak tworzyć dowiązania symboliczne systemu Windows lub ich odpowiedniki (ja nie!), Możesz to zrobić zamiast tego. Dostępnych jest o wiele więcej opcji : http://docs.python.org/install/index.html , w tym opcja dołączania sys.path z katalogiem na poziomie użytkownika twojego kodu programistycznego, ale w praktyce zwykle po prostu łączę symbolicznie mój katalog rozwoju lokalnego do pakietów witryn - skopiowanie go ma ten sam efekt.źródło
__init__.py
w obu katalogach. Myślę, że problem polega na tym, że górny katalog NIE jest w PYTHONPATH, gdy PyLint działa i nie jestem pewien, jak to naprawić.ogólna odpowiedź na to pytanie, które znalazłem na tej stronie PROSZĘ NIE OTWIERAĆ, STRONA JEST ZAPŁEŻONA
utwórz
.pylintrc
i dodajźródło
Nie wiem, jak to działa z WingIDE, ale aby używać PyLint z Geany, ustawiłem moje zewnętrzne polecenie na:
gdzie% f to nazwa pliku, a% d to ścieżka. Może się komuś przyda :)
źródło
Musiałem zaktualizować
PYTHONPATH
zmienną systemową , aby dodać ścieżkę App Engine. W moim przypadku musiałem tylko wyedytować mój~/.bashrc
plik i dodać następujący wiersz:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
W rzeczywistości próbowałem ustawić
init-hook
pierwszy, ale to nie rozwiązało problemu konsekwentnie w całej mojej bazie kodu (nie wiem, dlaczego). Po dodaniu go do ścieżki systemowej (prawdopodobnie ogólnie dobry pomysł) moje problemy zniknęły.źródło
Jedynym obejściem, które dopiero co odkryłem, jest uruchomienie PyLint dla całego pakietu, a nie pojedynczego pliku. W jakiś sposób udaje mu się wtedy znaleźć zaimportowany moduł.
źródło
pylint ... dir
z folderu nadrzędnego. Wymaga__init__.py
to obecności w każdym podfolderze z.py
plikami.PróbowaćZwróć uwagę, że w Pythonie 3 składnia części w
else
klauzuli wyglądałaby takPo namyśle to prawdopodobnie nie rozwiąże Twojego konkretnego problemu. Źle zrozumiałem pytanie i pomyślałem, że two.py jest uruchamiany jako główny moduł, ale tak nie jest. Biorąc pod uwagę różnice w sposobie, w jaki Python 2.6 (bez importowania
absolute_import
z__future__
) i Python 3.x obsługuje importowanie, i tak nie musiałbyś tego robić dla Pythona 2.6, nie sądzę.Jeśli jednak w końcu przejdziesz na Python 3 i planujesz używać modułu zarówno jako modułu pakietu, jak i samodzielnego skryptu wewnątrz pakietu, dobrym pomysłem może być zachowanie czegoś takiego jak
na myśli.
EDYCJA: A teraz możliwe rozwiązanie Twojego rzeczywistego problemu. Albo uruchom PyLint z katalogu zawierającego twój
one
moduł (być może przez wiersz poleceń) lub umieść następujący kod gdzieś podczas uruchamiania PyLint:Zasadniczo, jako alternatywa dla majstrowania przy PYTHONPATH, po prostu upewnij się, że bieżący katalog roboczy jest katalogiem zawierającym
one.py
podczas importowania.(Patrząc na odpowiedź Briana, prawdopodobnie mógłbyś przypisać poprzedni kod do
init_hook
, ale jeśli zamierzasz to zrobić, możesz po prostu dodać dosys.path
tego, co robi, co jest nieco bardziej eleganckie niż moje rozwiązanie).źródło
Kluczem jest dodanie katalogu projektu
sys.path
bez rozważania o zmiennej env.Dla kogoś, kto korzysta z VSCode, oto rozwiązanie jednowierszowe dla Ciebie, jeśli istnieje katalog podstawowy Twojego projektu:
Pozwólcie, że trochę to wyjaśnię:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: znajdź katalog podstawowy zgodnie z plikiem edycjios.path.join(os.getcwd(), base_dir)
: dodajcwd
dosys.path
środowiska wiersza poleceńFYI, oto moje .pylintrc:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
źródło
Miałem ten sam problem i naprawiłem go, instalując pylint w moim virtualenv, a następnie dodając plik .pylintrc do katalogu mojego projektu z następującym w pliku:
źródło
Może ręcznie dołączając katalog w PYTHONPATH?
źródło
Miałem ten sam problem, a ponieważ nie mogłem znaleźć odpowiedzi, mam nadzieję, że pomoże to każdemu, kto ma podobny problem.
Używam flymake z epylintem. Zasadniczo to, co zrobiłem, to dodanie haka dired-mode-hook, który sprawdza, czy katalog dired jest katalogiem pakietu Pythona. Jeśli tak, dodaję go do PYTHONPATH. W moim przypadku uważam katalog za pakiet Pythona, jeśli zawiera plik o nazwie „setup.py”.
Mam nadzieję że to pomoże.
źródło
Jeśli ktoś szuka sposobu, aby uruchomić pylint jako zewnętrzne narzędzie w PyCharm i sprawić, by działał ze swoimi wirtualnymi środowiskami (dlaczego przyszedłem do tego pytania), oto jak to rozwiązałem:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Teraz użycie pylint jako narzędzia zewnętrznego uruchomi pylint w dowolnym katalogu, który wybrałeś, używając wspólnego pliku konfiguracyjnego i użyje dowolnego interpretera skonfigurowanego dla twojego projektu (który prawdopodobnie jest twoim interpreterem virtualenv).
źródło
To jest stare pytanie, ale nie ma zaakceptowanej odpowiedzi, więc zasugeruję następujące: zmień instrukcję import w two.py, aby przeczytać:
W moim obecnym środowisku (Python 3.6, VSCode przy użyciu pylint 2.3.1) usuwa to oznaczoną instrukcję.
źródło
Znalazłem fajną odpowiedź . Edytuj swój pylintrc i dodaj następujące elementy w pliku master
źródło
Podczas instalowania Pythona możesz ustawić ścieżkę. Jeśli ścieżka jest już zdefiniowana, możesz zrobić w programie VS Code, naciśnij Ctrl + Shift + P i wpisz Python: Select Interpreter i wybierz zaktualizowaną wersję Pythona. Kliknij to łącze, aby uzyskać więcej informacji, https://code.visualstudio.com/docs/python/environments
źródło
jeśli używasz vscode, upewnij się, że katalog pakietu znajduje się poza katalogiem _pychache__.
źródło
Jeśli używasz Cythona w Linuksie, rozwiązałem problem usunięcia
module.cpython-XXm-X-linux-gnu.so
plików w katalogu docelowym mojego projektu.źródło
po prostu dodaj ten kod w pliku .vscode / settings.json
, "python.linting.pylintPath": "venv / bin / pylint"
Spowoduje to powiadomienie o lokalizacji pylinta (który jest narzędziem do sprawdzania błędów dla Pythona)
źródło
Witam, udało mi się zaimportować pakiety z innego katalogu. Właśnie wykonałem następujące czynności: Uwaga: używam VScode
Kroki tworzenia pakietu w języku Python Praca z pakietami w języku Python jest naprawdę prosta. Wystarczy, że:
Utwórz katalog i nadaj mu nazwę swojego pakietu. Umieść w nim swoje zajęcia. Utwórz plik init .py w katalogu
Na przykład: masz folder o nazwie Framework, w którym przechowujesz wszystkie niestandardowe klasy, a Twoim zadaniem jest po prostu utworzenie pliku init .py w folderze o nazwie Framework.
Podczas importu musisz importować w ten sposób --->
z bazy importu Framework
więc błąd E0401 znika. Framework to folder, w którym właśnie utworzyłeś plik init .py, a baza to Twój niestandardowy moduł, do którego musisz zaimportować i pracować z nadzieją, że to pomaga !!!!
źródło