簡體   English   中英

將另一個項目作為模塊導入python

[英]Importing another project as modules in python

假設我有一個以下結構的項目

projectfoo/
|- mymodule/
|--|- __init__.py
|--|- library.py
|- preprocessor.py

mymodule__init__.py中看起來像這樣

from . import library #library itself has other functions

def some_function():
    blar blar blar...

preprocessor.py看起來像如下

import mymodule

def main():
    something()

def something():
    mymodule.some_function() # calls the function defined in __init__.py

if __name__ == '__main__':
    main()

然后我開始projectbar ,它使用了大量的來自公共代碼projectfoo 因此,我希望將projectfoo導入到項目欄中,而不是在項目之間復制和粘貼代碼,如下所示。

projectbar/
|- projectfoo/
|--|- mymodule/
|--|--|- __init__.py
|--|--|- library.py
|--|- preprocessor.py
|- index.py

所以我試圖按如下方式在我的index.py導入preprocessor

from projectfoo import preprocessor

但是我收到一條錯誤消息,說preprocessor.py現在無法導入mymodule

ImportError: No module named 'mymodule'

我這樣做正確嗎? 我正在使用在我的設置中的ubuntu 14.04中運行的python3.4。

編輯:我也嘗試將__init__.py添加到projectfoo ,但我仍然遇到相同的錯誤

因為沒有將預處理器的路徑添加為庫包,所以出現此錯誤

from sys import path as pylib #im naming it as pylib so that we won't get confused between os.path and sys.path 
import os
pylib += [os.path.abspath(r'/projectfoo')]
from projectfoo import preprocessor

僅供參考:os.path將返回絕對路徑。 但是sys.path將返回路徑env。 系統設置中的變量。

希望能幫助到你。

嘗試將空的__init__.py添加到projectfoo文件夾。

您必須在projectfoo/文件夾中添加__init__.py文件(可以為空),以使其成為有效模塊。

然后使用相對導入來顯式指定您正在請求當前模塊的子模塊mymodule如下所示:

from .projectfoo import preprocessor

. 代表包含import語句的文件所在的當前模塊。 其父模塊將表示為.. ,其“祖父母”將表示為...等。

暫無
暫無

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

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