我工作的一个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