Python无法在父级中引用模块

时间:2017-12-21 14:05:01

标签: python python-3.x

我正在尝试在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
ColorUtils文件夹中的

init .py

from . import ColorUtils

ColorUtils.py

class ColorUtils:
    def __...

Color.py

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两次的情况下调用它。

2 个答案:

答案 0 :(得分:2)

更改您的__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了解有关相对/绝对导入的更多信息。

要解决您的实际问题,您可以这样做:

color.py

  1. import sys

  2. 删除您的syscolor.py来电
  3. 更改:import cvImageUtils.ColorUtils as ct
    致:from cvImageUtils.ColorUtils import *

  4. 删除所有ct引用,而只是使用实际功能。

  5. cvImageUtils / __init__。PY

    更改:from . import ColorUtils__all__=['ColorUtils']

    我能够运行color.py以便在屏幕上打印出所有图像。 本地也生成了image.png

答案 1 :(得分:1)

您希望在模块搜索中公开的每个目录(我们通常隐藏test.py)都需要一个init.py文件。这应该是经验法则,通过使用sys模块,您可以将模块添加到“模块搜索路径”。

在目录中使用init.py之后,需要导入要使用的包/模块/功能: -

import cvImageUtils.ColorUtils.convert_rbg_to_grayscale

您可以在python中执行以下代码,以查看sys路径中包含的内容(由python用于搜索模块/包)

import sys
sys.path

请参阅以下链接以获取更详细的解释 https://www.programiz.com/python-programming/package
https://www.programiz.com/python-programming/modules#search