- 1 1. Pangkalahatang-ideya ng import na pahayag at relative path import sa Python
- 2 2. Pagkakaiba ng Relative Path at Absolute Path
- 3 3. Paraan ng Pag-import Gamit ang Relatibong Path
- 4 4. Pag-import ng mga module sa loob ng pakete
- 5 5. Mga Karaniwang Error at ang mga Solusyon Nito
- 6 6. Praktikal na Halimbawa at Pag-aaplay
- 7 7. Konklusyon
1. Pangkalahatang-ideya ng import na pahayag at relative path import sa Python
Kapag gumagawa ng mga programa sa Python, gumagamit ng import
na pahayag upang epektibong mag-reuse ng mga module. Sa import
na ito, ang relative path import ay lalo na kapaki-pakinabang kapag may flexible na dependency sa pagitan ng mga module. Sa artikulong ito, tatalakayin ang paggamit ng relative path sa import
na pahayag ng Python at ang mga benepisyo nito.
Ano ang relative path import?
Ang relative path import ay paraan ng pag-import ng ibang module batay sa lokasyon ng kasalukuyang module. Lalo itong kapaki-pakinabang sa malalaking proyekto at sa pag-develop ng mga package na may maraming module. Sa paggamit ng relative path import, nagiging malinaw ang dependency sa pagitan ng mga module, at mas madaling mapanatili ang proyekto.
Halimbawa, ipagpalagay na may ganitong istraktura ng direktoryo.
project/
├── main.py
├── package/
│ ├── module_a.py
│ └── sub_package/
│ └── module_b.py
Kapag i-import ang module_a.py
mula sa module_b.py
gamit ang relative path, isulat ito nang ganito.
from ..module_a import some_function
Sa ganitong paraan, kapag ginamit ang relative path, maaaring i-import ang mga module nang flexible batay sa hierarchy ng direktoryo.
2. Pagkakaiba ng Relative Path at Absolute Path
Sa Python import
statement, may dalawang uri: relative path at absolute path. Magkaiba ang paraan ng pagtukoy sa module na i-import.
Absolute Path Import
Ang absolute path import ay nagsisimula mula sa root directory ng proyekto upang tukuyin ang module na i-import. Halimbawa, sa isang proyektong may ganitong estruktura, kung i-import mula sa main.py
papunta sa module_a.py
gamit ang absolute path, isusulat ito ng ganito.
from package.module_a import some_function
Kapaki-pakinabang ang pamamaraang ito kapag malinaw ang kabuuang estruktura ng proyekto at pare-pareho ang lokasyon ng mga module.
Relative Path Import
Sa kabilang banda, ang relative path import ay nag-iimport batay sa lokasyon ng kasalukuyang module. Ang relative path import ay flexible lalo na kapag nagbago ang estruktura ng proyekto. Sa ganitong paraan, maaaring mapanatili ang mga dependency sa pagitan ng mga module habang pinapabuti ang muling paggamit ng code.
Halimbawa, ang sumusunod na code ay nag-iimport ng module mula sa isang antas pataas na directory mula sa kasalukuyang module.
from ..module_a import some_function
Ang pagpili ay depende sa laki at komplikasyon ng proyekto; karaniwang kung ang lokasyon ng module ay permanente, gamitin ang absolute path, at kung madalas magbago, gamitin ang relative path.
3. Paraan ng Pag-import Gamit ang Relatibong Path
Pag-import ng mga module mula sa parehong direktoryo
Kapag nag-iimport ng mga module na nasa parehong direktoryo, hindi kailangan ng komplikadong pagtukoy; basta ilahad lamang ang pangalan ng module. Halimbawa, kung ang module_a.py
at module_b.py
ay nasa parehong direktoryo, maaaring i-import tulad ng sumusunod.
import module_a
Kung nais mag-import ng tiyak na function o klase, gawin ito tulad ng sumusunod.
from module_a import some_function
Pag-import mula sa mas mataas na direktoryo
Kapag nag-iimport ng module na nasa mas mataas na direktoryo, gamitin ang ..
upang umakyat isang antas, pagkatapos tukuyin ang module. Halimbawa, kung mag-iimport mula sa isang antas pataas, isusulat ito ng ganito.
from ..module_a import some_function
Pag-import mula sa mas mababang direktoryo
Kapag nag-iimport mula sa mas mababang direktoryo, paghiwalayin ang pangalan ng direktoryo at ng module gamit ang tuldok. Halimbawa, i-import ang module mula sa mas mababang direktoryo tulad ng sumusunod.
from sub_package.module_b import some_function
Sa paggamit ng relatibong path, kahit na magbago ang estruktura ng mga direktoryo sa loob ng proyekto, flexible ang code na mag-adjust—ito ay malaking benepisyo.
4. Pag-import ng mga module sa loob ng pakete
Sa Python, may konsepto ng “pakete” para mag-ayos ng mga module. Ang pakete ay kapaki-pakinabang kapag pinagsasama ang maraming module, lalo na sa malalaking proyekto. Maaari ring i-import ang mga module sa loob ng pakete gamit ang relative na path.
Estruktura ng pakete at __init__.py
na file
Kapag gumagawa ng pakete, kailangan mong magdagdag ng file na __init__.py
sa directory nito. Ang file na ito ay nagsisilbing pagpapakilala sa directory bilang “pakete” sa Python. Ipapaliwanag gamit ang isang halimbawa ng proyektong may ganitong estruktura.
project/
├── main.py
├── package/
│ ├── __init__.py
│ ├── module_a.py
│ └── sub_package/
│ ├── __init__.py
│ └── module_b.py
Relative na pag-import ng mga module sa loob ng pakete
Halimbawa, mula sa module_b.py
papuntang module_a.py
gamit ang relative na path, isusulat ito ng ganito.
from ..module_a import some_function
Ang ..
ay nangangahulugang pag-akyat isang antas mula sa kasalukuyang directory. Sa ganitong paraan, maaaring ibahagi ang mga function at klase sa pagitan ng mga module sa loob ng pakete.
Kung mag-iimport ng module sa parehong pakete gamit ang relative na path, maaaring tukuyin ito nang simple gamit ang tuldok.
from .module_a import some_function
Dahil dito, ang mga module ng proyekto ay maaaring mag-ugnayan nang maikli, at kahit magbago ang estruktura ng directory, hindi na kailangan ng malawak na pagbabago sa code.
5. Mga Karaniwang Error at ang mga Solusyon Nito
Sa relative path import ng Python, may ilang karaniwang error na maaaring mangyari. Sa seksyong ito, ipapaliwanag namin ang mga error na ito at ang mga solusyon.
ImportError: attempted relative import with no known parent package
Ang error na ito ay isang karaniwang error na nangyayari kapag sinusubukang i-import ang isang module gamit ang relative path. Lalo na nangyayari ito kapag ang script ay direktang pinapatakbo. Halimbawa, ang sumusunod na code ay maaaring magdulot ng problema.
from ..module_a import some_function
Ang error na ito ay nangyayari dahil hindi makikilala ng Python ang parent package ng script. Sa Python, kailangang malinaw na makilala na ang module ay bahagi ng isang package. Kapag direktang pinapatakbo ang script, mataas ang posibilidad na mag-error kapag gumamit ng relative path.
Solusyon
Upang maiwasan ang problemang ito, isa sa mga paraan ay gamitin ang sys.path
upang malinaw na itakda ang search path ng module. Halimbawa, sa sumusunod na paraan, gumamit ng sys.path.append()
upang idagdag ang parent directory sa search path.
import sys
sys.path.append('..')
from module_a import some_function
Dahil dito, makakahanap nang tama ang Python ng module.
ModuleNotFoundError
Isa pang karaniwang error ay ang ModuleNotFoundError
. Ito ay nangyayari kapag hindi natagpuan ang tinukoy na module. Kapag sinusubukang i-import gamit ang relative path, maaaring mali ang lokasyon ng module o hindi tama ang pagtatakda ng sys.path
.
Solusyon
Upang malutas ang problemang ito, mahalagang suriin ang import statement at tiyakin na umiiral ang module. Bukod dito, gamit ang sys.path.append()
upang malinaw na tukuyin ang directory kung saan makakahanap ang Python ng module, maaaring maiwasan ang error。
6. Praktikal na Halimbawa at Pag-aaplay
Dito ay magpapakita kami ng mga konkretong halimbawa ng code gamit ang relative path import. Sa ganitong paraan, mauunawaan mo kung paano magagamit ang relative path sa totoong proyekto.
Halimbawa: Pag-import mula sa Itaas na Direktoryo
Isipin na may ganitong estruktura ng proyekto.
project/
├── main.py
├── package/
│ ├── module_a.py
│ └── sub_package/
│ └── module_b.py
module_b.py
mula sa module_a.py
na function some_function
ay i-import, ang code ay ang mga sumusunod.
# module_b.py
from ..module_a import some_function
def use_function():
some_function()
Sa code na ito, ginagamit ang ..
upang bumalik isang antas pataas, at ini-import ang function mula sa module_a
. Ang pamamaraang ito ay kapaki-pakinabang kapag nagbabahagi ng mga function o klase sa pagitan ng mga module na nasa magkaibang direktoryo.
Halimbawa: Pag-import ng Module gamit ang sys.path
Susunod, ipapakita namin ang halimbawa ng pag-import ng module mula sa parent directory gamit ang sys.path.append()
.
# module_b.py
import sys
sys.path.append('..')
from module_a import some_function
def use_function():
some_function()
Sa pamamaraang ito, dahil idinagdag ang parent directory sa sys.path
, matutuklasan ng Python nang tama ang module_a
. Ang approach na ito ay epektibo lalo na kapag direkta mong pinapatakbo ang script.
7. Konklusyon
Sa artikulong ito, detalyado naming ipinaliwanag ang relative path import sa import
ng Python. Ang relative path import ay kapaki-pakinabang lalo na sa malalaking proyekto at pag-develop ng mga pakete dahil nagagawa nitong pamahalaan nang flexible ang mga dependency sa pagitan ng mga module ng proyekto. Gayunpaman, dahil madali itong magdulot ng mga error, mahalaga ang tamang pagsasaayos at paggamit ng sys.path
.
Sa pag-unawa sa mga benepisyo ng relative path import at paggamit nito sa aktwal na proyekto, magiging posible ang mas epektibong pamamahala ng code.