μν¬νΈλ¦¬λ§λ€ λλ¦° ν μ€νΈκ° μ λΆ ν΅κ³Όνλλ°, κ·Έ ν΅κ³Όκ° μ μ κ·Έ μν¬νΈλ¦¬μ μ½λλ₯Ό κ²μ¦ν κ² μλμμ΅λλ€
μ κΈ°λ₯ λ¬Άμμ λ€ κ°μ git worktreeμ λλ λ³λ ¬λ‘ κ°λ°νκ³ μμμ΅λλ€.
μν¬νΈλ¦¬λ§λ€ λ 립λ λΈλμΉμμ μλ‘ λ€λ₯Έ λΆλΆμ λ§‘μμ΅λλ€. κ°μ μμμ ν μ€νΈλ₯Ό λλ € ν΅κ³Όλ₯Ό νμΈν λ€, μμλ₯Ό μ ν΄ λ©μΈ λΈλμΉμ μ°¨λ‘λ‘ λ³ν©νλ κ³νμ΄μμ΅λλ€.
μ¦μ
λ³ν© μμλ₯Ό μ 리νλ μ€, 보쑰 μ€ν¬λ¦½νΈ νλλ₯Ό λ€μ λ€μ¬λ€λ΄€μ΅λλ€. 리ν¬νΈλ₯Ό λ§λ€ λ μ°λ λ¬λμμ΅λλ€.
νμΌ λ§¨ μμ μ΄λ° μ½λκ° μμμ΅λλ€. μ λκ²½λ‘ νλλ₯Ό μμλ‘ λ°μλκ³ , sys.path.insert(0, κ·Έ κ²½λ‘)λ‘ λ§¨ μμ λΌμ λ£λ μ½λμμ΅λλ€.
κ·Έ κ²½λ‘λ λ©μΈ 체ν¬μμμ μ λκ²½λ‘μμ΅λλ€. μν¬νΈλ¦¬κ° μλλΌ, νμ κ°μ ν κ³³μ κ°λ¦¬ν€λ κ³ μ λ λ¬Έμμ΄μ΄μμ΅λλ€.
μ²μ μκ°
μ²μμ μ λ¬Έμ κ° λλμ§ λ°λ‘ 체κ°μ΄ μ λμ΅λλ€.
νλ‘μ νΈ λ£¨νΈλ₯Ό import κ°λ₯νκ² λ§λ€λ €κ³ λ£μ, νν 보λ μ€μ²λΌ 보μμ΅λλ€. κ° μν¬νΈλ¦¬λ git μμ€μμ λ 립λ λλ ν°λ¦¬λκΉ, μ€ν¬λ¦½νΈλ₯Ό μ΄λμ μ€ννλ κ·Έ λλ ν°λ¦¬ μμ μκΈ° μ¬λ³Έμ μν¬νΈν κ±°λΌκ³ κ°μ νμ΅λλ€.
κ·Έ κ°μ μ΄ νλ Έμ΅λλ€.
μ§μ§ μμΈ
git worktreeλ μμ λλ ν°λ¦¬λ§ μλ‘ λΆλ¦¬ν©λλ€. νμ΄μ¬μ import μμ€ν μ μ₯μμλ κ·Έλ₯ λμ€ν¬ μμ μλ λ λ€λ₯Έ κ²½λ‘μΌ λΏμ λλ€.
μ΄ μ€ν¬λ¦½νΈλ₯Ό μ΄λ μν¬νΈλ¦¬μμ μ€ννλ , μ½λμ λ°ν μ λκ²½λ‘λ νμ λ©μΈ 체ν¬μμμ κ°λ¦¬ν΅λλ€. μ€ν μμΉμ 무κ΄νκ² λκ°μ κ°μ λλ€.
pytestλ₯Ό νμΌμ μ§μ νμ§ μκ³ λκ²(μ 체 λλ ν°λ¦¬λ -k ν¨ν΄μΌλ‘) λ리면, μ΄ μ€ν¬λ¦½νΈλ μμ§ λμμ λΌμ΄ μν¬νΈλ©λλ€. κ·Έ μκ° λͺ¨λ 맨 μμ μ½λ, μ¦ sys.path.insert(0, ...)κ° μ€νλ©λλ€.
κ·Έ λ€λ‘ κ°μ νλ‘μΈμ€ μμμ μΌμ΄λλ λͺ¨λ import λ sys.path 맨 μμ κ½ν λ©μΈ 체ν¬μμ κ²½λ‘λ₯Ό λ¨Όμ λ΄
λλ€. μν¬νΈλ¦¬ μμ μ μμ λ μ½λκ° μλλΌ, λ©μΈμ λ¨μ μλ μμ μ½λμ
λλ€.
κ·Έλ¬λκΉ μν¬νΈλ¦¬ νλμμ "ν μ€νΈ μ λΆ ν΅κ³Ό"κ° λμλ€ ν΄λ, κ·Έ ν΅κ³Όκ° μ€μ λ‘ κ·Έ μν¬νΈλ¦¬μ λ³κ²½μ¬νμ κ²μ¦νλ€λ 보μ₯μ΄ μμμ΅λλ€. μ΄μ΄ λμλ©΄ λ©μΈμ μ μ½λλ₯Ό λμμΌλ‘ ν΅κ³Όν κ²μΌ μ μμμ΅λλ€.
μ κ·Έλμ μ κ±Έλ Έλ
sys.path μ€μΌμ μλ¬λ₯Ό λμ§μ§ μμ΅λλ€. importλ κ·Έλ₯ "μ±κ³΅"ν©λλ€. λμ 보μ΄λ μ νΈκ° μ ν μμ΅λλ€.
λ€ μν¬νΈλ¦¬ κ°κ°μμ "ν΅κ³Ό" λ³΄κ³ λ₯Ό λ°μΌλ©΄μλ, κ·Έ ν΅κ³Όκ° μ€μ λ‘ μ΄λ€ μ½λλ₯Ό μ€νν κ²°κ³ΌμΈμ§ μ무λ λ€μ νμΈνμ§ μμμ΅λλ€. ν μ€νΈ λ¬λκ° μ΄λ‘λΆμ μΌλ©΄, κ·Έκ±Έλ‘ λμ΄λΌκ³ λ―Ώμ΄λ²λ¦° κ²λλ€.
μ΄λ»κ² λμνλμ§
κ·Όλ³Έ μμ μ μ½λμ λ°ν μ λκ²½λ‘λ₯Ό λΉΌλ κ²μ΄μ§λ§, λ³ν© μΌμ μ΄ λΉ‘λΉ‘ν΄μ λΉμ₯μ μ°νλ‘ λ§μμ΅λλ€.
λ¬Έμ κ° λλ μ€ν¬λ¦½νΈκ° pytest μμ§ λμμ λΌμ§ μλλ‘, λμ λμ€μ»€λ²λ¦¬ λμ κ²μ¦νλ €λ νμΌμ λͺ μμ μΌλ‘ μ§μ ν΄μ μ€ννλ λ°©μμΌλ‘ λ°κΏ¨μ΅λλ€. κ·Έλ¦¬κ³ μ΄ μ€ν¨ μ νμ "μ¬κ³ ν΄λμ€"λ‘ λ°λ‘ κΈ°λ‘ν΄, λμ€μ νλμ½λ© μ체λ₯Ό μ κ±°νλ μμ μΌλ‘ λκ²Όμ΅λλ€.
μΌλ°ννλ©΄
μ λκ²½λ‘λ₯Ό μ¬μ import ν μ μν¬νΈλ¦¬Β·λͺ¨λ Έλ ν¬μ 격리λ₯Ό μ‘°μ©ν 무ν¨νν©λλ€. λλ ν°λ¦¬κ° λΆλ¦¬λΌ μμ΄λ, μ½λ ν μ€μ΄ κ·Έ λΆλ¦¬λ₯Ό κ°λ‘μ§λ¬ νμ κ°μ ν κ³³μ κ°λ¦¬ν¬ μ μμ΅λλ€.
"ν μ€νΈκ° ν΅κ³Όνλ€"λ "λ΄κ° μνλ μ¬λ³Έμ μ½λκ° μ€νλλ€"λ₯Ό 보μ₯νμ§ μμ΅λλ€. νΉν κ°μ μ½λλ² μ΄μ€λ₯Ό μ¬λ¬ 체ν¬μμμΌλ‘ λμμ μ°λ νκ²½μμλ, ν΅κ³Ό μ¬λΆλ³΄λ€ λ¨Όμ "μ§κΈ μ΄κ² μ΄λ μ¬λ³Έμ μν¬νΈνκ³ μλκ°"λ₯Ό νμΈν΄μΌ ν©λλ€.
λμ ν
μ€νΈ λμ€μ»€λ²λ¦¬λ λΆμμ©κΉμ§ ν¨κ» μμ§ν©λλ€. pytest μ 체λ -k ν¨ν΄μΌλ‘ λ리면, μλμΉ μκ² μμ§λ λͺ¨λμ μ΅μλ¨ μ½λλ κ°μ΄ μ€νλ©λλ€. κ²μ¦νλ €λ νμΌμ λͺ
μμ μΌλ‘ μ§μ νλ μ€νμ μ΄λ° λΆμμ©μ λ
ΈμΆλ©΄μ μ€μ¬μ€λλ€. μμ ν ν΄λ²μ μλμ§λ§, κ·Όλ³Έ μμ μ κΉμ§ λ²νΈ μ μλ μ μ
λλ€.
λ³λ ¬ μμ΄μ νΈΒ·λ³λ ¬ λΈλμΉλ‘ μΌν λλ "κ° μμ 곡κ°μ΄ λ 립μ μΌλ‘ 보μΈλ€"λ μ°©μκ° λ μνν©λλ€. λμ€ν¬μ λλ ν°λ¦¬κ° λλμ΄ μλ€λ μ¬μ€μ΄, κ·Έ μμ μ½λκ° μ€μ λ‘ κ²©λ¦¬λΌ μλ€λ μ¦κ±°λ μλλλ€. μ λκ²½λ‘ ν μ€μ΄λ©΄ κ·Έ 격리λ₯Ό λμ΄κ° μ μμ΅λλ€.





