Bagaimana cara mengimpor file lain dengan Python?
- Bagaimana tepatnya saya dapat mengimpor file python tertentu
import file.py
? - Bagaimana saya bisa mengimpor folder daripada file tertentu?
- Saya ingin memuat file Python secara dinamis saat runtime, berdasarkan input pengguna.
- Saya ingin tahu cara memuat hanya satu bagian tertentu dari file.
Misalnya, di main.py
saya punya:
from extra import *
Meskipun ini memberi saya semua definisi extra.py
, ketika mungkin semua yang saya inginkan adalah definisi tunggal:
def gap():
print
print
Apa yang harus saya tambahkan ke import
pernyataan untuk hanya mendapatkan gap
dari extra.py
?
python
python-import
Penjinak
sumber
sumber
Jawaban:
importlib
ditambahkan ke Python 3 untuk secara terprogram mengimpor modul. Itu hanya pembungkus__import__
, lihat dokumen .Catatan:
.py
ekstensi harus dihapus darimoduleName
. Fungsi ini juga mendefinisikanpackage
argumen untuk impor relatif.Pembaruan: Jawaban di bawah ini sudah usang . Gunakan alternatif yang lebih baru di atas.
Hanya
import file
tanpa ekstensi '.py'.Anda dapat menandai folder sebagai paket, dengan menambahkan file kosong bernama
__init__.py
.Anda dapat menggunakan
__import__
fungsi ini. Dibutuhkan nama modul sebagai string. (Lagi: nama modul tanpa ekstensi '.py'.)Ketik
help(__import__)
untuk detail lebih lanjut.sumber
import filename
ke init .py maka Anda dapat mengimpor modul secara langsung sebagai nama folder.help(__import__)
:Because this function is meant for use by the Python interpreter and not for general use it is better to use importlib.import_module() to programmatically import a module.
import filenamenoext
berfungsi dengan baik untuk saya, dengan Python 3.4.8.Ada banyak cara untuk mengimpor file python, semuanya dengan pro dan kontra mereka.
Jangan hanya cepat-cepat memilih strategi impor pertama yang bekerja untuk Anda atau Anda harus menulis ulang basis kode nanti ketika Anda menemukan itu tidak memenuhi kebutuhan Anda.
Saya akan mulai menjelaskan contoh paling mudah # 1, lalu saya akan beralih ke contoh paling profesional dan kuat # 7
Contoh 1, Impor modul python dengan juru bahasa python:
Masukkan ini ke /home/el/foo/fox.py:
Masuk ke juru bahasa python:
Anda mengimpor fox melalui interpreter python, memanggil fungsi python
what_does_the_fox_say()
dari dalam fox.py.Contoh 2, Gunakan
execfile
atau (exec
dalam Python 3 ) dalam skrip untuk menjalankan file python lain di tempatnya:Masukkan ini ke /home/el/foo2/mylib.py:
Letakkan ini di /home/el/foo2/main.py:
jalankan file:
Fungsi moobar diimpor dari mylib.py dan tersedia di main.py
Contoh 3, Gunakan dari ... impor ... fungsionalitas:
Masukkan ini ke /home/el/foo3/chekov.py:
Letakkan ini di /home/el/foo3/main.py:
Jalankan seperti ini:
Jika Anda mendefinisikan fungsi lain di chekov.py, mereka tidak akan tersedia kecuali Anda
import *
Contoh 4, Impor riaa.py jika berada di lokasi file yang berbeda dari tempat diimpor
Masukkan ini ke /home/el/foo4/stuff/riaa.py:
Masukkan ini ke /home/el/foo4/main.py:
Menjalankannya:
Itu mengimpor segala sesuatu di file asing dari direktori yang berbeda.
Contoh 5, gunakan
os.system("python yourfile.py")
Contoh 6, impor file Anda dengan membonceng python startuphook:
Memperbarui: Contoh ini digunakan untuk python2 dan 3, tetapi sekarang hanya berfungsi untuk python2. python3 menyingkirkan set fitur startuphook pengguna ini karena disalahgunakan oleh penulis perpustakaan python keterampilan rendah, menggunakannya untuk menyuntikkan kode mereka ke dalam namespace global, sebelum semua program yang ditentukan pengguna. Jika Anda ingin ini berfungsi untuk python3, Anda harus menjadi lebih kreatif. Jika saya memberi tahu Anda cara melakukannya, pengembang python juga akan menonaktifkan set fitur itu, sehingga Anda dapat melakukannya sendiri.
Lihat: https://docs.python.org/2/library/user.html
Masukkan kode ini ke direktori home Anda di
~/.pythonrc.py
Masukkan kode ini ke main.py Anda (bisa di mana saja):
Jalankan, Anda harus mendapatkan ini:
Jika Anda mendapatkan kesalahan di sini:
ModuleNotFoundError: No module named 'user'
maka itu berarti Anda menggunakan python3, startuphooks dinonaktifkan di sana secara default.Kredit untuk jist ini jatuh ke: https://github.com/docwhat/homedir-examples/blob/master/python-commandline/.pythonrc.py Kirim sepanjang kapal Anda.
Contoh 7, Most Robust: Mengimpor file dalam python dengan perintah bare import:
/home/el/foo5/
/home/el/foo5/herp
Buat file kosong bernama di
__init__.py
bawah herp:Buat direktori baru / home / el / foo5 / herp / derp
Di bawah derp, buat
__init__.py
file lain :Di bawah / home / el / foo5 / herp / derp buat file baru bernama
yolo.py
Letakkan ini di sana:Saat kebenaran, Buat file baru
/home/el/foo5/main.py
, letakkan ini di sana;Menjalankannya:
File kosong
__init__.py
berkomunikasi dengan juru bahasa python bahwa pengembang bermaksud direktori ini untuk menjadi paket impor.Jika Anda ingin melihat posting saya tentang cara memasukkan SEMUA file .py di bawah direktori lihat di sini: https://stackoverflow.com/a/20753073/445131
sumber
__import__(py_file_name)
. Panduan luar biasaUntuk mengimpor file Python tertentu di 'runtime' dengan nama yang dikenal:
...
sumber
Anda tidak memiliki banyak metode kompleks untuk mengimpor file python dari satu folder ke folder lain. Cukup buat file __init__.py untuk mendeklarasikan folder ini adalah paket python dan kemudian pergi ke file host Anda di mana Anda ingin mengimpor ketik saja
from root.parent.folder.file import variable, class, whatever
sumber
Impor dokumen .. - Tautan untuk referensi
The
__init__.py
file yang diperlukan untuk membuat Python memperlakukan direktori sebagai mengandung paket, hal ini dilakukan untuk mencegah direktori dengan nama umum, seperti string, dari tidak sengaja menyembunyikan modul valid yang terjadi nanti path pencarian modul.__init__.py
bisa berupa file kosong, tetapi juga dapat menjalankan kode inisialisasi untuk paket atau mengatur__all__
variabel.sumber
Kasus pertama: Anda ingin mengimpor file
A.py
dalam fileB.py
, kedua file ini berada di folder yang sama, seperti ini:Anda dapat melakukan ini di file
B.py
:atau
atau
Maka Anda akan dapat menggunakan semua fungsi file
A.py
dalam fileB.py
Kasus kedua: Anda ingin mengimpor file
folder/A.py
dalam fileB.py
, kedua file ini tidak ada di folder yang sama, seperti ini:Anda dapat melakukannya di file B:
atau
atau
Maka Anda akan dapat menggunakan semua fungsi file
A.py
dalam fileB.py
Ringkasan: Dalam kasus pertama, file
A.py
adalah modul yang Anda impor dalam fileB.py
, Anda menggunakan sintaksimport module_name
. Dalam kasus kedua,folder
adalah paket yang berisi modulA.py
, Anda menggunakan sintaksimport package_name.module_name
.Untuk info lebih lanjut tentang paket dan modul, lihat tautan ini .
sumber
from folder_a.script import *
Script.py ada di bawah folder a.import sys
dansys.path.append("..")
ke awal file. Menurut ini: stackoverflow.com/a/48341902/6057480 . Diuji, berfungsi dengan baik, setelah melakukan ini, Anda akan dapat mengimpor file py di direktori induk dan masih dapat mengimpor file py di direktori dan sub-direktori yang sama.dan
Berikut adalah dua cara sederhana yang saya pahami sekarang dan pastikan file "file.py" yang ingin Anda impor sebagai pustaka hadir di direktori Anda saat ini saja.
sumber
Jika fungsi yang didefinisikan dalam file
x.py
:Di file tempat Anda mengimpor fungsi, tulis ini:
Ini berguna jika Anda tidak ingin mengimpor semua fungsi dalam file.
sumber
cara terbaik untuk mengimpor file .py adalah dengan
__init__.py
. hal yang paling sederhana untuk dilakukan, adalah membuat file kosong dengan nama__init__.py
direktori yang sama dengan lokasi file.py Anda.posting ini oleh Mike Grouchy adalah penjelasan yang bagus tentang
__init__.py
dan penggunaannya untuk membuat, mengimpor, dan mengatur paket python.sumber
Cara saya mengimpor adalah mengimpor file dan menggunakan singkatan dari namanya.
Jangan lupa bahwa file impor Anda HARUS dinamai dengan ekstensi .py
sumber
import DoStuff.py as DS
mencoba mengimporpy
dariDoStuff
?Saya ingin menambahkan catatan ini saya tidak jelas di tempat lain; di dalam modul / paket, ketika memuat dari file, nama modul / paket harus diawali dengan
mymodule
. Bayangkanmymodule
menjadi tata letak seperti ini:Saat memuat
somefile.py
/otherstuff.py
dari__init__.py
konten akan terlihat seperti:sumber
Jika modul yang ingin Anda impor tidak ada dalam sub-direktori , maka coba yang berikut ini dan jalankan
app.py
dari direktori induk umum terdalam:Struktur Direktori:
Di
app.py
, tambahkan jalur klien ke sys.path:Opsional (Jika Anda memuat mis. Konfigurasi) (Inspeksi tampaknya yang paling kuat untuk kasus penggunaan saya)
Lari
Solusi ini bekerja untuk saya di cli, dan juga PyCharm.
sumber
Ada beberapa cara untuk memasukkan skrip python Anda dengan nama abc.py
Jika skrip python Anda diperbarui dan Anda tidak ingin mengunggah - gunakan pernyataan ini untuk penyegaran otomatis. Bonus :)
sumber
Hanya untuk mengimpor file python di file python lain
katakanlah saya memiliki file python helper.py yang memiliki fungsi tampilan seperti,
Sekarang di app.py , Anda dapat menggunakan fungsi tampilan,
Hasil,
I'm working sundar gsv
CATATAN: Tidak perlu menentukan ekstensi .py.
sumber
Ini mungkin terdengar gila tetapi Anda hanya dapat membuat tautan simbolis ke file yang ingin Anda impor jika Anda hanya membuat skrip wrapper untuk itu.
sumber
Anda juga dapat melakukan ini:
from filename import something
contoh:
from client import Client
Perhatikan bahwa Anda tidak perlu.py .pyw .pyui
ekstensi.sumber
Inilah yang saya lakukan untuk memanggil fungsi dari file python, yang fleksibel bagi saya untuk memanggil fungsi apa pun.
sumber
from mypath import Path
denganPath = callfunc("/folder/to/mypath.py", "Path")
. Terima kasih @ Xiao-Ada banyak cara, seperti yang tercantum di atas, tetapi saya menemukan bahwa saya hanya ingin mengimpor konten file, dan tidak ingin harus menulis baris dan baris dan harus mengimpor modul lain . Jadi, saya datang dengan cara untuk mendapatkan konten file, bahkan dengan sintaks dot (
file.property
) yang bertentangan dengan menggabungkan file yang diimpor dengan Anda.Pertama-tama, ini file saya yang akan saya impor,
data.py
Catatan: Anda bisa menggunakan
.txt
ekstensi sebagai gantinya.Di
mainfile.py
, mulailah dengan membuka dan mendapatkan isinya.Sekarang Anda memiliki konten sebagai string, tetapi mencoba mengakses
data.testString
akan menyebabkan kesalahan, sepertidata
instance daristr
kelas, dan bahkan jika memiliki properti,testString
ia tidak akan melakukan apa yang Anda harapkan.Selanjutnya, buat kelas. Misalnya (pun intended),
ImportedFile
Dan masukkan ini ke dalamnya (dengan indentasi yang sesuai):
Dan akhirnya, tetapkan kembali
data
seperti:Dan itu dia! Cukup akses seperti yang Anda lakukan untuk modul lainnya, mengetik
print(data.testString)
akan mencetak ke konsolA string literal to import and test with
.Namun, jika Anda ingin yang setara dengan
from mod import *
hanya drop kelas, tugas contoh, dan hapusexec
.Semoga ini bisa membantu :)
-Benji
sumber
Salah satu fitur Python yang sangat tidak dikenal adalah kemampuan untuk mengimpor
zip
file:File
__init__.py
paket berisi yang berikut ini:Kita dapat menulis skrip lain yang dapat mengimpor paket dari arsip zip. Hanya perlu menambahkan file zip ke sys.path.
sumber