假設您有一個名爲Ninja的大型(python)軟件項目。該項目有幾個部分,如服務器和客戶端,而且還包含一個通用的基礎結構庫,其中包含常用的類和工具。當然,我會創建一個像這樣的包裹結構:ninja.core
,ninja.server
和ninja.client
,其中服務器和客戶端以某種方式導入ninja.core
。爲發展宗旨(我們使用Eclipse與Subversion)的核心,服務器和客戶保持在不同的項目,從而導致在一個文件夾結構是這樣的:不同項目的python庫如何處於同一個包中?
eclipse_workspace
|
>-Ninja_core
| |
| >-ninja
| |
| >-core
|
>-Ninja_client
| |
| >-ninja
| |
| >-client
.
.
.
有一個Java的背景我假設這將是可能的,但事實證明(讀取:導入錯誤),這是行不通的。正如this answer指出的那樣,它通常是不可能有兩個ninja.core
和ninja.client
除非它們是相同的包ninja
,其中它們不是子包。這樣就產生了:
解決方法A:
- 放在一個單一的Eclipse/SVN項目整個代碼和只有一個 包
ninja
與根據子包。
在生產環境中,我們希望能夠安裝核心和服務器但不客戶或核心和客戶但不服務器。我可能會誤解,但據我瞭解python包,這是不可能的方法A.保持項目分開但兼容,使用包名稱爲ninja_core
,ninja_client
和ninja_server
,它似乎是有用的事實上解決了進口問題,並使開發設置中的一切順利運行。爲了滿足能夠安裝服務器和客戶獨立的要求,我想出的主意:
方法B:
- 創建一個名爲忍者新的項目,包含軟件包
ninja
- 讓的
ninja
導入其他庫(如果安裝的話),看起來是在之內。
我還沒有得到這個工作到目前爲止,我認爲它可能不可能。我在想這樣的事情:
# __init__.py of ninja
import ninja_core as core
# or this:
from ninja_core import core
# or this:
import ninja_core.core
我試過這些,又得到了導入錯誤。在google搜索結合python軟件包的方法並沒有找到與我的問題相關的任何東西之後,我來到了這裏。
我在想,也許整件事都是設計錯誤。應該客戶端和服務器即使它們可以獨立安裝在同一個包中?想要獨立安裝客戶端和服務器是不是一個好主意?爲什麼我可以在java中使用擴展包,但是不能在python中使用?這背後的想法是什麼?
TL;博士
我開發的忍者圖書館,用戶應該能夠做到import ninja.client
和import ninja.server
。需要分別爲客戶端和服務器安裝庫。如何實現這一目標?
它的工作原理,但由於'ninja'文件夾中不包含'__init __。py',eclipse不能識別任何子文件夾是軟件包。有沒有一個選項或簡單的解決方法呢? – nfs
對不起,不知道;我自己不使用Eclipse或PyDev;一個快速的谷歌顯示其他人抱怨,但我沒有看到任何簡單的修復你。 –