Saya menjalankan PyLint dari dalam Wing IDE pada Windows. Saya memiliki sub-direktori (paket) di proyek saya dan di dalam paket saya mengimpor modul dari tingkat atas, yaitu.
__init__.py
myapp.py
one.py
subdir\
__init__.py
two.py
Di dalam two.py
saya miliki import one
dan ini berfungsi dengan baik pada saat runtime, karena direktori tingkat atas (dari yang myapp.py
dijalankan) ada di jalur Python. Namun, ketika saya menjalankan PyLint di two.py itu memberi saya kesalahan:
F0401: Unable to import 'one'
Bagaimana cara saya memperbaikinya?
~/.pylintrc
bekerja untuk saya di OSX, yang lain tidak berfungsiexport PYTHONPATH
sehinggapylint
akan melihatnya (setidaknya, di bash / zsh)Solusi untuk mengubah jalur masuk
init-hook
adalah baik, tetapi saya tidak menyukai kenyataan bahwa saya harus menambahkan jalur absolut di sana, karena itu saya tidak dapat membagikan file pylintrc ini di antara para pengembang proyek. Solusi ini menggunakan jalur relatif ke file pylintrc berfungsi lebih baik untuk saya:Catatan yang
pylint.config.PYLINTRC
juga ada dan memiliki nilai yang sama denganfind_pylintrc()
.sumber
.
(titik).app
), Anda dapat menggunakanfrom pylint.config import find_pylintrc; import os, sys; sys.path.append(os.path.join(os.path.dirname(find_pylintrc()), 'app'))
1) sys.path adalah daftar.
2) Masalahnya kadang-kadang sys.path bukan virtualenv.path Anda dan Anda ingin menggunakan pylint di virtualenv Anda
3) Jadi seperti dikatakan, gunakan init-hook (perhatikan dalam 'dan "parsing pylint ketat)
atau
.. dan
sumber
pylint
ke dalam virtualenv saya sesuai saran ini: plaidzooks.tumblr.com/post/36813101879pylint --generate-rcfile > .pylintrc
di folder home Anda.Masalahnya dapat diselesaikan dengan mengkonfigurasi jalur pylint di bawah venv: $ cat .vscode / settings.json
sumber
{ "python.pythonPath": "${workspaceFolder}\\.venv\\Scripts\\python.exe" "python.linting.pylintPath": "${workspaceFolder}\\.venv\\Scripts\\pylint.exe" }
Hanya untuk kelengkapan.The setting "python.pythonPath" defined in your settings.json is now deprecated.
Jika saya menghapuspython.pythonPath
baris sepertinya masih berfungsi.Apakah Anda memiliki
__init__.py
file kosong di kedua direktori untuk memberi tahu python bahwa direktori adalah modul?Garis dasar ketika Anda tidak menjalankan dari dalam folder (yaitu mungkin dari pylint, meskipun saya belum pernah menggunakannya) adalah:
Ini adalah bagaimana interpreter python mengetahui modul tanpa referensi ke direktori saat ini, jadi jika pylint dijalankan dari jalur absolutnya sendiri, ia akan dapat diakses
functions_etc.py
sebagaitopdir.functions_etc
atautopdir.subdir.other_functions
, asalkantopdir
ada padaPYTHONPATH
.UPDATE: Jika masalahnya bukan pada
__init__.py
file, mungkin hanya mencoba menyalin atau memindahkan modul Anda kec:\Python26\Lib\site-packages
- itu adalah tempat umum untuk meletakkan paket tambahan, dan pasti akan berada di pythonpath Anda. Jika Anda tahu cara melakukan tautan simbolik Windows atau yang setara (saya tidak!), Anda bisa melakukannya. Ada banyak opsi di sini: http://docs.python.org/install/index.html , termasuk opsi untuk menambahkan sys.path dengan direktori tingkat pengguna dari kode pengembangan Anda, tetapi dalam praktiknya saya biasanya hanya secara simbolis menghubungkan dir pengembangan lokal saya ke paket situs - menyalinnya memiliki efek yang sama.sumber
__init__.py
di kedua direktori. Saya pikir masalahnya adalah bahwa direktori teratas TIDAK di PYTHONPATH ketika PyLint berjalan dan saya tidak yakin bagaimana cara memperbaikinya.jawaban umum untuk pertanyaan ini saya temukan di halaman ini TOLONG BUKAN, SITUS BUGED
buat
.pylintrc
dan tambahkansumber
Saya tidak tahu cara kerjanya dengan WingIDE, tetapi untuk menggunakan PyLint dengan Geany, saya mengatur perintah eksternal saya ke:
di mana% f adalah nama file, dan% d adalah path. Semoga bermanfaat bagi seseorang :)
sumber
Saya harus memperbarui
PYTHONPATH
variabel sistem untuk menambahkan jalur App Engine saya. Dalam kasus saya, saya hanya perlu mengedit~/.bashrc
file dan menambahkan baris berikut:export PYTHONPATH=$PYTHONPATH:/path/to/google_appengine_folder
Sebenarnya, saya mencoba mengatur yang
init-hook
pertama tetapi ini tidak menyelesaikan masalah secara konsisten di basis kode saya (tidak yakin mengapa). Setelah saya menambahkannya ke jalur sistem (mungkin ide yang bagus secara umum) masalah saya hilang.sumber
Satu solusi yang baru saja saya temukan adalah untuk benar-benar hanya menjalankan PyLint untuk seluruh paket, daripada satu file. Entah bagaimana, ia berhasil menemukan modul yang diimpor kemudian.
sumber
pylint ... dir
dari folder induk. Ini__init__.py
harus ada di setiap subfolder dengan.py
file.MencobaPerhatikan bahwa dalam Python 3, sintaks untuk bagian dalam
else
klausa akan menjadiSetelah dipikir-pikir, ini mungkin tidak akan memperbaiki masalah spesifik Anda. Saya salah mengerti pertanyaan dan berpikir bahwa two.py dijalankan sebagai modul utama, tetapi bukan itu masalahnya. Dan mengingat perbedaan dalam cara Python 2.6 (tanpa mengimpor
absolute_import
dari__future__
) dan Python 3.x menangani impor, Anda tidak perlu melakukan ini untuk Python 2.6, saya tidak berpikir.Namun, jika Anda akhirnya beralih ke Python 3 dan berencana menggunakan modul sebagai modul paket dan juga skrip mandiri di dalam paket, mungkin ide yang bagus untuk menyimpan sesuatu seperti
dalam pikiran.
EDIT: Dan sekarang untuk solusi yang mungkin untuk masalah Anda yang sebenarnya. Jalankan PyLint dari direktori yang berisi
one
modul Anda (mungkin melalui baris perintah), atau letakkan kode berikut di suatu tempat saat menjalankan PyLint:Pada dasarnya, sebagai alternatif untuk mengutak-atik PYTHONPATH, pastikan direktori kerja saat ini adalah direktori yang berisi
one.py
ketika Anda melakukan impor.(Melihat jawaban Brian, Anda mungkin dapat menetapkan kode sebelumnya
init_hook
, tetapi jika Anda akan melakukan itu maka Anda bisa menambahkannyasys.path
, yang sedikit lebih elegan daripada solusi saya.)sumber
Kuncinya adalah menambahkan direktori proyek Anda
sys.path
tanpa mempertimbangkan variabel env.Untuk seseorang yang menggunakan VSCode, berikut ini adalah solusi satu baris untuk Anda jika ada direktori dasar proyek Anda:
Biarkan saya jelaskan sedikit:
re.search(r".+\/" + base_dir, os.getcwd()).group()
: cari direktori dasar sesuai dengan file pengeditanos.path.join(os.getcwd(), base_dir)
: tambahkancwd
kesys.path
untuk memenuhi lingkungan baris perintahFYI, ini .pylintrc saya:
https://gist.github.com/chuyik/f0ffc41a6948b6c87c7160151ffe8c2f
sumber
Saya memiliki masalah yang sama dan memperbaikinya dengan menginstal pylint di virtualenv saya dan kemudian menambahkan file .pylintrc ke direktori proyek saya dengan yang berikut dalam file:
sumber
Mungkin dengan menambahkan dir secara manual di dalam PYTHONPATH?
sumber
Saya memiliki masalah yang sama dan karena saya tidak dapat menemukan jawaban, saya harap ini dapat membantu siapa saja dengan masalah yang sama.
Saya menggunakan flymake dengan epylint. Pada dasarnya yang saya lakukan adalah menambahkan dired-mode-hook yang memeriksa apakah direktori dired adalah direktori paket python. Jika itu saya tambahkan ke PYTHONPATH. Dalam kasus saya, saya menganggap direktori sebagai paket python jika berisi file bernama "setup.py".
Semoga ini membantu.
sumber
Jika ada yang mencari cara untuk menjalankan pylint sebagai alat eksternal di PyCharm dan membuatnya bekerja dengan lingkungan virtual mereka (mengapa saya sampai pada pertanyaan ini), inilah cara saya menyelesaikannya:
$PyInterpreterDirectory$/pylint
--rcfile=$ProjectFileDir$/pylintrc -r n $FileDir$
$FileDir$
Sekarang menggunakan pylint sebagai alat eksternal akan menjalankan pylint pada direktori apa pun yang telah Anda pilih menggunakan file konfigurasi umum dan menggunakan penerjemah apa pun yang dikonfigurasi untuk proyek Anda (yang mungkin adalah penerjemah virtualenv Anda).
sumber
Ini adalah pertanyaan lama tetapi tidak memiliki jawaban yang diterima, jadi saya akan menyarankan ini: ubah pernyataan impor dalam two.py untuk membaca:
Di lingkungan saya saat ini (Python 3.6, VSCode menggunakan pylint 2.3.1) ini menghapus pernyataan yang ditandai.
sumber
Saya menemukan jawaban yang bagus . Edit pylintrc Anda dan tambahkan berikut ini di master
sumber
Ketika Anda menginstal Python, Anda dapat mengatur path. Jika path sudah ditentukan maka yang dapat Anda lakukan adalah di dalam VS Code, tekan Ctrl + Shift + P dan ketik Python: Pilih Interpreter dan pilih versi terbaru dari Python. Ikuti tautan ini untuk informasi lebih lanjut, https://code.visualstudio.com/docs/python/environmentments
sumber
jika Anda menggunakan vscode, pastikan direktori paket Anda keluar dari direktori _pychache__.
sumber
Jika Anda menggunakan Cython di Linux, saya memutuskan untuk menghapus
module.cpython-XXm-X-linux-gnu.so
file di direktori target proyek saya.sumber
cukup tambahkan kode ini dalam file .vscode / settings.json
, "python.linting.pylintPath": "venv / bin / pylint"
Ini akan memberi tahu lokasi pylint (yang merupakan pemeriksa kesalahan untuk python)
sumber
Halo saya bisa mengimpor paket dari direktori yang berbeda. Saya baru saja melakukan yang berikut: Catatan: Saya menggunakan VScode
Langkah-langkah untuk Membuat Paket Python Bekerja dengan paket Python sangat sederhana. Yang perlu Anda lakukan adalah:
Buat direktori dan berikan nama paket Anda. Masukkan kelas Anda di dalamnya. Buat file .py init di direktori
Misalnya: Anda memiliki folder bernama Kerangka kerja tempat Anda menyimpan semua kelas khusus di sana dan tugas Anda hanyalah membuat file .py init di dalam folder bernama Kerangka Kerja.
Dan saat mengimpor Anda perlu mengimpor dengan cara ini --->
dari basis impor Framework
sehingga kesalahan E0401 menghilang Framework adalah folder di mana Anda baru saja dibuat init .py dan base adalah modul kustom Anda yang harus Anda impor dan kerjakan semoga membantu !!!!
sumber