簡體   English   中英

如何從同級目錄導入python模塊?

[英]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來解決此問題。 查看此屏幕截圖

在此處輸入圖片說明

但是我無法理解它會帶來什么不同。 這是確切的問題-

  1. 在這種情況下如何解決python導入問題?
  2. 有沒有更好的方法來構造python代碼,這樣我們就不會遇到相對導入的問題?
  3. -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模塊將文件夾添加到路徑,從而允許直接進行導入。

*參考:

  1. 如何從同級目錄導入Python腳本?
  2. 兄弟文件夾中的Python導入模塊

使用導入語句:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM