我想在python中建立一个库。我已经创建了一个setup.py文件,并在其下的文件夹中有一个库文件夹,然后我尝试创建一个示例和测试文件夹(用于示例代码和我将包含的测试)
文件夹:
- setup.py
- cvImageUtils # this is the library
- __init__.py # this includs ColorUtils
- ColorUtils.py # this includes a class called ColorUtils
- examples
- color.py # this is shown below
init.py在一个文件夹ColorUtils
from . import ColorUtils
color U替LS.朋友
class ColorUtils:
def __...
color.朋友
from cvImageUtils import ColorUtils
m1 = cv2.imread(os.path.join(image_folder, "bb.jpeg"), 1) # 1 = load color
cv2.imshow('grayscale', ColorUtils.convert_rbg_to_grayscale(m1))
首先,它说,无法找到模块,所以我根据另一个SO解决方案在文件的顶部添加了以下内容:
import sys
sys.path.append('../')
现在这似乎已经打破了我,但它确实让我超过了找到的无模块,但现在它说ColorUtils has no method convert_rbg_to_grayscale
。那么我不得不把它改成ColorUtils.ColorUtils.convert_rbg_to_grayscale
cv2.imshow('grayscale', ColorUtils.ColorUtils.convert_rbg_to_grayscale(m1))
如何设置文件夹以便它允许我包含没有sys的库,并在不声明ColorUtils两次的情况下调用它。
改变你的__init__.py
:
from cvImageUtils.ColorUtils import ColorUtils
我认为你不再需要import sys
了,而且你没有两次导入ColorUtils。但就像你必须实例化一个对象一样,你应该创建一个ColorUtils
对象。
我个人的偏好是不会为Utils创建一个Class。
你可能已经这样做了,但如果你想直接从类中使用一个方法,就像你在python中那样,你可能想要声明它static
。
class ColorUtils:
@staticmethod
def util_method():
pass
那么你可以这样做:
ColorUtils.util_method()
更新:
你可以从here上阅读更多关于相对/绝对导入的信息。
为了解决你的实际问题,你可以这样做:
import sys
删除你的sys
和color.py
电话import cvImageUtils.ColorUtils as ct
to:from cvImageUtils.ColorUtils import *
ct
引用,而不是使用实际的功能。__init__
.py改变:from . import ColorUtils
到__all__=['ColorUtils']
我能够运行color.py
来获取屏幕上打印的所有图像。 image.png
也在当地生成。
您希望在模块搜索中公开的每个目录(我们通常隐藏test.py)都需要一个init.py文件。这应该是经验法则,通过使用sys模块,您可以将模块添加到“模块搜索路径”。
在目录中使用init.py之后,需要导入要使用的包/模块/函数: -
import cvImageUtils.ColorUtils.convert_rbg_to_grayscale
您可以在python中执行以下代码,以查看sys路径中包含的内容(由python用于搜索模块/包)
import sys
sys.path
请查看以下链接以获取更详细的说明 qazxsw poi qazxsw poi