无法导入包文件(没有名为...的模块)(Python)

Can't import package file (no module named...) (Python)

我在尝试 运行 代码(来自 CMD)时收到此错误:

ModuleNotFoundError: No module named 'numbers.hog'; numbers is not a package

这里是 hog.py 文件代码...

from skimage import feature

class HOG:
    def __init__(self, orientations = 9, pixelsPerCell = (8, 8),
        cellsPerBlock = (3, 3), normalize = False):
        self.orienations = orientations
        self.pixelsPerCell = pixelsPerCell
        self.cellsPerBlock = cellsPerBlock
        self.normalize = normalize

def describe(self, image):
    hist = feature.hog(image,
    orientations = self.orienations,
    pixels_per_cell = self.pixelsPerCell,
    cells_per_block = self.cellsPerBlock,
    normalize = self.normalize)

    return hist

...和 ​​return 错误的主要 (train.py)。

from sklearn.svm import LinearSVC
from numbers.hog import HOG
from numbers import dataset
import argparse
import pickle as cPickle


ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", required = True,
    help = "path to the dataset file")
ap.add_argument("-m", "--model", required = True,
    help = "path to where the model will be stored")
args = vars(ap.parse_args())


(digits, target) = dataset.load_digits(args["dataset"])
data = []

hog = HOG(orientations = 18, pixelsPerCell = (10, 10),
    cellsPerBlock = (1, 1), normalize = True)

for image in digits:
    image = dataset.deskew(image, 20)
    image = dataset.center_extent(image, (20, 20))

    hist = hog.describe(image)
    data.append(hist)

model = LinearSVC(random_state = 42)
model.fit(data, target)

f = open(args["model"], "w")
f.write(cPickle.dumps(model))
f.close()

我不明白为什么它会给我模块包错误。 numbers 是一个包,为什么它不导入它(看起来)?

更新:尝试输入 from .hog import HOG 然后从 CMD 执行..它打印:

No module named '__main__.hog'; '__main__' is not a package

疯了吗? hog.py 与其他文件一起在主包中。如您所见,它还包含 HOG class.. 无法理解.. 有人可以重现错误吗?

在 IDE 控制台中打印:

usage: train.py [-h] -d DATASET -m MODEL
train.py: error: the following arguments are required: -d/--dataset, -m/--model

一旦在 IDE 中执行,这应该是正确的,因为程序必须 运行 在 CMD 中。

更新 2:对于感兴趣的人,这是项目 https://github.com/VAUTPL/Number_Detection

重要 numbers 是一个 python 标准包 https://docs.python.org/2/library/numbers.html

检查您是否真的没有导入该包或将您的包重命名为更具体的名称。

还有:

看起来 python 无法识别您的包裹。

打开一个pythonshell然后写:

import sys
print sys.path

检查你的号码路径是否存在。

如果没有,您必须添加它。

sys.path.insert(0, "/path/to/your/package_or_module")


您的 train.py 文件已经在包 "numbers" 中,因此您不必导入号码。

试试这个:

from hog import HOG

我在评论中看到它给你 "error (red line)"。
你能更准确一点吗,因为我没有看到那里的错误。



from numbers.hog import HOG 更改为 from hog import HOG,将
更改为 from numbers import dataset

您已经在 "numbers" 包中,因此您在导入时无需再次精确。
当您键入 from numbers import dataset 时,Python 将查找包含 dataset.py 文件的包 numbers(在实际包内)。

如果您的 train.pynumbers 包之外,那么您必须在前面加上包名 (numbers)。