簡體   English   中英

在python項目上導入文件

[英]File importing on python project

我想在python中有以下項目目錄結構:

project\
    generic.py
    subdir1\
        file1.py
    subdir2\
        file2.py
    subdir3\
        file3.py

在 file1.py 中,我想從項目的根目錄導入generic.py

import generic

不幸的是,我在嘗試執行“file1.py”時出錯

root:~/project/sidir1# python file1.py
Traceback (most recent call last):
  File "file1.py", line 7, in <module>
    import generic
ImportError: No module named generic

我想執行單個文件*.py並包含generic.py

如何正確地將它包含在這樣的目錄結構下?

您可以通過在根目錄中創建__init__.py來使您的 python 項目成為一個包。

然后您可以使用相對導入,例如: from .. import generic

看看這里:如何導入上面目錄中的 Python 類? 如何導入上面目錄中的 Python 類?

這是Python path的原因,當您使用import ,如果給定名稱的模塊存在,python 將嘗試在sys.path中的每個目錄中sys.path ,如果沒有找到,他會提出。

要解決您的問題,只需將父目錄添加到您的 python 路徑

import sys
sys.path.append("..")

我鼓勵您將generic.py與其他子模塊一起包裝在一個包中。 從 root 導入通常是一個很好的方法,以后需要調試不再按應有方式工作的導入。 包內的相對導入也可能成為問題。

只需構建一個這樣的結構:

project\
    my_package\
        generic.py
        __init__.py
        subdir1\
            file1.py
            __init__.py
        subdir2\
            file2.py
            __init__.py
        subdir3\
            file3.py
            __init__.py

現在在file*.py做: from my_package import generic

現在在project級別放置一個main.py或類似的腳本,您可以在其中使用 my_package 中可用的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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