当我运行顶级文件
downloader.py
时,我收到意外的导入错误,这是意外的,因为我认为该函数在 downloader.py
调用它时已完成。我不确定应该在哪个文件中解决这个问题。我正在 VS Code 中运行并使用 VS Code 生成的 venv
from downloader_mod.shelf import ShelfData
File "c:\archive_shelf_flaskbased\src\downloader_mod\shelf.py", line 6, in <module>
from directory_handler import DirectoryNameHandler
ModuleNotFoundError: No module named 'directory_handler'
当我直接运行
shelf.py
时,调用该类的地方,它运行良好。
当我在子模块中添加 downloader.py
调用之前运行 DirectoryNameHandler()
时,它运行良好。
文件结构:
archive_shelf_flaskbased/
.vscode/
src/
[app.py] * to do
[views.py] * to do
downloader.py
logging_config.py
__init__.py
downloader_mod/
directory_handler.py
download.py
page.py
shelf.py
__init__.py
我尝试过的:
from downloader_mod.directory_handler import DirectoryNameHandler
添加到 downloader.py
,但没有什么区别。__init__.py
添加到 downloader_mod
文件夹中。这也没有什么区别。(venv) PS C:\archive_shelf_flaskbased\src> & "c:/Goodreads Bookshelf Tool/archive_shelf_flaskbased/venv/Scripts/python.exe" "c:/Goodreads Bookshelf Tool/archive_shelf_flaskbased/src/downloader.py"
Traceback (most recent call last):
File "c:\archive_shelf_flaskbased\src\downloader.py", line 3, in <module>
from downloader_mod.shelf import ShelfData
File "c:\archive_shelf_flaskbased\src\downloader_mod\shelf.py", line 6, in <module>
from directory_handler import DirectoryNameHandler
ModuleNotFoundError: No module named 'directory_handler'
我没有尝试过:
.vscode/settings.json
、.vscode/launch.json
、.env
还是命令行更改?文件代码:
src/downloader.py
from downloader_mod.shelf import ShelfData
from downloader_mod.directory_handler import DirectoryNameHandler
logger = logging.getLogger(__name__)
setup_logging()
sh = ShelfData({'shelf_name': "Generic", 'creation_date': "02/25/2023"})
sh.setup_download_dir()
print(f"{sh.simple_dir = }")
src/downloader_mod/shelf.py
from directory_handler import DirectoryNameHandler
class ShelfData:
def __init__(self, data_dict=None):
self.initialize_shelf_dict()
if data_dict is not None:
self.add_data_to_shelf_dict(data_dict)
# self.shelf_name and self.creation_date made above
dn = DirectoryNameHandler(self.shelf_name, self.creation_date)
self.simple_dir = dn.simple_dir
downloader_mod/directory_handler.py
from datetime import datetime
class DirectoryNameHandler:
def __init__(self, shelf_name, date_obj) -> None:
year = f'{date_obj.year}'
self.simple_dir = f"{shelf_name}_{date_obj.strftime('%b%d')}"
运行脚本时,模块搜索路径上只有
src
,而不是 download_mod
。
shelf.py
应该使用 relative 导入,而不是假设 directory_handler.py
也是顶级模块。
from .directory_handler import DirectoryNameHandler