[英]How to import python modules from sibling directory?
我有一個具有以下結構的python(3.6.3)項目
setup.py
utils #python package
utils/constants.py
utils/name_reports.py
normalization #python package
normalization/resolve_name.py
categorization #python package
categorization/animal_categories.py
您可以在github上找到源代碼-https: //github.com/techmango-org/python-import-resolution
這是utils/name_reports.py
的源代碼
import normalization.resolve_name as rn
import categorization.animal_categories as ac
test_name = 'DOGY'
resolved_name = rn.get_animal_name(test_name)
print('********ANIMAL CATEGORY IS:', ac.get_animal_score(resolved_name))
當我運行python utils/name_reports.py
時,出現以下異常
Traceback (most recent call last):
File "utils/name_reports.py", line 1, in <module>
import normalization.resolve_name as rn
ModuleNotFoundError: No module named 'normalization'
我試圖通過運行pip install .
將當前軟件包安裝到虛擬環境站點軟件包中來解決此問題pip install .
但這意味着對於每個本地更改,我都必須運行pip install --upgrade .
將我的本地更改移到站點包中。
我一直在使用hack -m unittest
來解決此問題。 查看此屏幕截圖
但是我無法理解它會帶來什么不同。 這是確切的問題-
-m unittest
在解決這個問題上有什么區別? 由於SO *已經有很多答案,因此我將重點關注問題(2)。 關於什么是更好的代碼組織:
|- setup.py
|- top_pkg_name
|- __init__.py
|- pkg1
|- __init__.py
|- pkg2
|- __init__.py
(相對)導入是從module_2
內部完成的,如下所示:
from ..pkg1 import module1 as m1
另外,您可以使用絕對導入,這是指頂級軟件包名稱:
from top_pkg_name.pkg1 import module1 as m1
在這樣的組織中,當您想將任何模塊作為腳本運行時,必須使用-m
標志:
python -m top_pkg_name.pkg1.module1
對於問題(3),我不確定,但是看起來好像unittest
模塊將文件夾添加到路徑,從而允許直接進行導入。
*參考:
使用導入語句:
from normalization import resolve_name
from categorization import animal_categories
您的代碼:
from normalization import resolve_name as rn
from categorization import animal_categories as ac
test_name = 'DOGY'
resolved_name = rn.get_animal_name(test_name)
print('********ANIMAL CATEGORY IS:', ac.get_animal_score(resolved_name))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.