我工作的一個Python庫(不是我),看起來像這樣:如何打包其導入在Python中產生副作用的庫?
.
├── README.md
├── setup.py
└── library
├── __init__.py
├── core.py
├── a.py
└── b.py
文件__init__.py
化妝用其本身使用a.py
和b.py
core.py
。重要的是要注意import library
有一些故意打算的副作用。
但是,我想給用戶使用功能core.py
而不會有任何副作用的可能性。遺憾的是,正如您所知,import library.core
或from library import core
無論如何都會執行__init__.py
(發生副作用)。
你知道我該如何重組我的包和setup.py
來解決這個問題?
我認爲是這樣的:
.
├── README.md
├── setup.py
├── library_core
│ ├── __init__.py
│ ├── core.py
│ ├── a.py
│ └── b.py
└── library
└── __init__.py # Import library_core and apply side effects
我將更新setup.py
與packages = ['library', 'library_core']
。這樣,導入library
不會改變任何內容,但用戶可以導入library_core
,而沒有任何副作用。此外,這將避免重複代碼,並且所有內容都會保留在同一個存儲庫中。
不幸的是,這不起作用,因爲我無法從library
導入library_core
,因爲它們不在文件樹中的相同位置。
*「不幸的是,這並不工作,因爲我沒有從庫中導入library_core的能力。」 * - 看起來像這是你的主要問題,當你在'library/__ init __。py'中嘗試'從library_core import core'時會發生什麼? – Kos
@Kos其實,這可以工作...我首先試着'從..library_core import *'顯然失敗了,但只要'import library_core'將會工作**一旦安裝了軟件包**使用'python setup.py install'。我想這是要走的路。所以我會空白這個問題。 – Delgan