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

时间:2017-07-31 09:41:36

标签: python module packages

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

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

enter image description here

以下是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

...以及返回错误的主(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是一个包,为什么它不导入它(看起来像)?

enter image description here

更新:尝试放置from .hog import HOG,然后从CMD执行..打印:

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

疯了吗? hog.py与其他文件一起位于主程序包中。正如你所看到的,它还包含HOG类....无法理解..有人可以重现错误吗?

在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

3 个答案:

答案 0 :(得分:2)



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

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

如果您的train.py超出了numbers套餐,那么您必须先提供套餐名称(numbers)。

答案 1 :(得分:0)

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

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

此外:

看起来python似乎无法识别你的包。

打开python shell并写:

import sys
print sys.path

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

如果不存在,则必须添加它。

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

答案 2 :(得分:0)


您的train.py文件已包含在"数字"包中,因此您无需导入数字。

请改为尝试:

from hog import HOG

我在评论中看到它给你"错误(红线)"。
你能更精确吗,因为我在那里看不到错误。