gpt4 book ai didi

python - 导入错误: No Module named 'BluePrints'

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:15 24 4
gpt4 key购买 nike

我正在为暑期类学习 Python,并且遇到了此错误:在下面的代码中,您将看到我有一个包,我将其加载到 Director.py 中,并将其用作我的主文件。但是,当 BluePrints.py 明显位于目录中时,它就丢失了。我也多次检查过打字错误,但这不是问题所在。我正在学习的书中没有关于这个问题的文档,我在网上的Python文档中也没有看到这个问题,在StackOverflow上也找不到这个具体问题。这是我的代码:

# Director.py
from Builder import HouseBuilders as hb, HouseBuilderInterface as hbi

interface = hbi.HouseBuilderInterface() # An interface to my concrete builders
first_house = hb.EarthHomeBuilder() # Initialize a concrete builder

interface.build_room(first_house, 'kitchen') # Build a room in the Earth House

Builder/HouseBuilderInterface.py

class HouseBuilderInterface():

""" HouseBuilder utilizes Python's duck-typing to provide an interface to the concrete house builders"""
def build_room(obj, room_type): # Rooms are an attribute shared by all houses
obj.build_room(room_type)

def build_wall(obj, room1, room2): # Walls are an attribute shared by all houses; Duplex's will have a unique Dividing Wall
obj.build_wall(room1, room2)

def build_window(obj, wall): # Windows are an attribute shared by all houses
obj.build_window(wall)

def build_door(obj): # Doors are an attribute shared by all houses; Colonial and Split-level houses can have basement doors
obj.build_door()

def build_stairs(obj): # Stairs can only be built in Colonial and Split-level houses; Colonial stair cases are bigger
obj.build_stairs()

def build_extra(obj): # Some houses have extra features: Earth-homes have plants on the roof, Single-story has a wrap-around-porch, etc.
obj.build_extra()

Builder/HouseBuilders.py

import BluePrints

class EarthHomeBuilder():

def __init__(self): # Initialize a simple house
self.room_no = 0
self.window_no = 0
self.door_no = 1
self.wall_no = 4
self.key = 0 # key attribute is a unique key for the dictionary
self.house_features = {}

def build_room(self, room_type):
new_room = BluePrints.Room(room_type)
self.room_no += 1
self.house_features[key] = room_type + ''
self.key += 1

Builder/BluePrints.py

class Room():
""" Defines a room object with an attribute of room_type"""
def __init__(self, room_type):
self.room_type = room_type

class Wall():
""" Defines a Wall object with attributes of window and door """
def __init__(self): # Initialize windows & doors to 0
self.windows = 0
self.doors = 0

def add_window(self):
self.windows += 1

def add_door(self):
self.doors += 1

class Window():
""" Defines a Window object with no attributes; Adds a window to specified Wall object"""
def __init__(wall_location):
wall_location.add_window() # Use duck-typing to call Wall method add_window()

class Door():
""" Defines a Door object with no attributes; Adds a door to specified Wall object """
def __init__(wall_location):
wall_location.add_door() # Use duck-typing to call Wall method add_door()

class StairCase():
""" Defines a StairCase object with an attribute of length """
def __init__(self, length):
self.length = length

class ExtraFeature():
""" Defines an ExtraFeature object which is unique type of house feature specific to each house """
def __init__(self, extra_feature):
self.extra_feature = extra_feature

注意:此作业是 Builder 软件模式的实现。另外,我只测试了 build_room 方法,如 Director.py 文件中所示。我不关心任何错误,除非它们与导入 BluePrints.py 的问题有关。确切的错误消息是 ImportError: no module named 'BluePrints'

编辑:

我使用的是Python3.4

最佳答案

问题是,在将 HouseBuilders 导入到 Director.py 后,sys.path 仍然保留在 Director.py< 的目录中 ,因此在 sys.path 指定的任何目录中直接没有 BluePrints.py

Python 在尝试查找要导入的包或类时会查找sys.path。我猜你正在使用 Python 3.x 。

修复方法是执行 documentation 中的操作说-

6.4.2. Intra-package References

When packages are structured into subpackages (as with the sound package in the example), you can use absolute imports to refer to submodules of siblings packages. For example, if the module sound.filters.vocoder needs to use the echo module in the sound.effects package, it can use from sound.effects import echo.

因此,在 Builder/HouseBuilders.py 中,将导入语句更改为 -

from Builder import BluePrints

关于python - 导入错误: No Module named 'BluePrints' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31577446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com