Pada dasarnya ketika saya memiliki file python seperti:
python-code.py
dan gunakan:
import (python-code)
penerjemah memberi saya kesalahan sintaks.
Ada ide tentang cara memperbaikinya? Apakah tanda hubung ilegal pada nama file python?
Pada dasarnya ketika saya memiliki file python seperti:
python-code.py
dan gunakan:
import (python-code)
penerjemah memberi saya kesalahan sintaks.
Ada ide tentang cara memperbaikinya? Apakah tanda hubung ilegal pada nama file python?
Jawaban:
Anda harus memeriksa PEP 8 , Panduan Gaya untuk Kode Python:
Nama Paket dan Modul Modul harus memiliki nama pendek, semua huruf kecil. Garis bawah dapat digunakan dalam nama modul jika itu meningkatkan keterbacaan. Paket-paket python juga harus memiliki nama-nama kecil, huruf kecil semua, meskipun penggunaan garis bawah tidak disarankan.
Karena nama modul dipetakan ke nama file, dan beberapa sistem file tidak sensitif huruf dan memotong nama panjang, penting bahwa nama modul dipilih agar cukup pendek - ini tidak akan menjadi masalah pada Unix, tetapi mungkin masalah ketika kode diangkut ke versi Mac atau Windows yang lebih lama, atau DOS.
Dengan kata lain: ganti nama file Anda :)
ops-scripts
dan tahu mereka tidak dapat diimpor menggunakan pendekatan namespace paket normal. Atau satu skrip dapat diberi nama stop-website.py
untuk efek yang sama. Semua ini masih dapat diimpor melalui runpy
dan beberapa metode lain tentu saja, tetapi ini membantu menghindari beberapa kesalahan umum.
cgi-bin
folder (melakukan unitttests pada mereka), yang merupakan standar afaik. Kecuali Anda memiliki case yang jarang seperti ini, pasti ganti nama modul Anda jika Anda memiliki kontrol atasnya.
Satu hal lagi yang perlu diperhatikan dalam kode Anda adalah bahwa impor bukan fungsi. Jadi import(python-code)
seharusnya import python-code
yang, seperti beberapa telah disebutkan, ditafsirkan sebagai "impor kode minus python", bukan apa yang Anda maksudkan. Jika Anda benar-benar perlu mengimpor file dengan tanda hubung dalam namanya, Anda dapat melakukan hal berikut ::
python_code = __import__('python-code')
Tetapi, seperti juga disebutkan di atas, ini tidak benar-benar direkomendasikan. Anda harus mengubah nama file jika itu sesuatu yang Anda kendalikan.
TLDR
Tanda hubung tidak ilegal tetapi Anda tidak boleh menggunakannya karena 3 alasan:
Jika Anda benar-benar perlu mengimpor nama file dengan tanda hubung sintaks khususnya adalah ini:
module_name = __import__('module-name')
Ingin tahu mengapa kita membutuhkan sintaks khusus?
Alasan untuk sintaks khusus adalah bahwa ketika Anda menulis import somename
Anda membuat objek modul dengan pengidentifikasi somename
(sehingga nanti Anda dapat menggunakannya dengan misalnya somename.funcname
). Tentu saja module-name
bukan pengidentifikasi yang valid dan karenanya sintaks khusus yang memberikan yang valid.
Anda tidak mengerti mengapa nama modul bukan pengidentifikasi yang valid?
Jangan khawatir - saya juga tidak. Berikut tip untuk membantu Anda: Lihat pada baris python ini: x=var1-var2
. Apakah Anda melihat pengurangan di sisi kanan penugasan atau nama variabel dengan tanda hubung?
PS
Tidak ada yang orisinal dalam jawaban saya kecuali termasuk apa yang saya anggap sebagai bit informasi yang paling relevan dari semua jawaban lain di satu tempat
psycopg2_binary = import_module('psycopg2-binary')
. Kesalahan => ModuleNotFoundError: No module named 'psycopg2-binary'
. Tetapi psycopg2-binary
sudah terpasang. Tidak tahu cara memasukkannya.
Masalahnya adalah itu python-code
bukan pengidentifikasi. Pengurai melihat ini sebagai python
minus code
. Tentu saja ini tidak akan melakukan apa yang Anda minta. Anda perlu menggunakan nama file yang juga merupakan pengidentifikasi python yang valid. Coba ganti -
dengan garis bawah.
Anda mungkin dapat mengimpornya melalui beberapa __import__
peretasan, tetapi jika Anda belum tahu caranya, Anda seharusnya tidak. Nama modul Python haruslah nama variabel yang valid ("pengidentifikasi") - itu artinya jika Anda memiliki modul foo_bar
, Anda dapat menggunakannya dari dalam Python ( print foo_bar
). Anda tidak akan dapat melakukannya dengan nama yang aneh ( print foo-bar
-> kesalahan sintaks).
Pada Python 3 gunakan import_module :
from importlib import import_module
python_code = import_module('python-code')
Lebih umum,
import_module('package.subpackage.module')
Meskipun penamaan file yang tepat adalah yang terbaik, jika python-code
tidak di bawah kendali kami, peretasan menggunakan __import__
lebih baik daripada menyalin, mengganti nama, atau main-main dengan kode penulis lain. Namun, saya mencoba dan tidak berhasil kecuali saya mengganti nama file dengan menambahkan .py
ekstensi. Setelah melihat dokumen untuk mendapatkan cara mendapatkan deskripsi .py
, saya berakhir dengan ini:
import imp
try:
python_code_file = open("python-code")
python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
python_code_file.close()
Itu menciptakan file baru python-codec
di jalankan pertama.