无法从其他文件夹导入模块
Cannot import modules from other folders
我目前在从我的 python 项目中的其他目录导入文件时遇到问题。
我当前的文件结构是
Project
- Backend
- Config
+ __init__.py
+ databaseConfig.py
- DataAccess
+ __init__.py
+ sqlConns.py
- __init__.py
- api.py
- main.py
- setup.py
我想做的是将 /Config/databaseConfig.py 文件导入 /DataAccess/sqlConns.py 文件。尝试 运行 sqlConns.py 文件
时出现以下错误
PS C:\source\repos\aaStats\aaStats> py .\Backend\DataAccess\sqlConns.py
Traceback (most recent call last):
File "C:\source\repos\aaStats\aaStats\Backend\DataAccess\sqlConns.py", line 2, in <module>
import Config.databaseConfig
ModuleNotFoundError: No module named 'Config'
我也试过使用相对导入,但我遇到了另一个错误。
PS C:\source\repos\aaStats\aaStats> py .\Backend\DataAccess\sqlConns.py
Traceback (most recent call last):
File "C:\source\repos\aaStats\aaStats\Backend\DataAccess\sqlConns.py", line 2, in <module>
from ..Config import databaseConfig as dbcfg
ImportError: attempted relative import with no known parent package
Config/databaseConfig.py 包含我想引用的数据库配置参数是我项目中的各个地方。如果我必须移动这个单个文件以使其被正确引用,这不是什么大不了的事情,但我希望稍后在我的项目中对文件使用这样的结构。
以下是有关我的文件的一些详细信息:
/Config/__init__.py
from . import databaseConfig
/DataAccess/__init__.py
from . import sqlConns
Backend/__init__.py
from . import DataAccess
from . import Config
Backend/setup.py
from setuptools import setup, find_packages
setup(
name='aaStatsApi',
version='0.1.0',
packages= ['DataAccess','Config'],
install_requires=[
'fastapi==0.63.0',
'uvicorn==0.13.4',
'requests==2.25.1',
'pyodbc==4.0.30',
]
)
- 查看 this post。
- 您无法如此轻松地执行相对导入这一事实是设计使然,无论是好是坏。理想的方法是将主脚本放在根 (
Backend
) 目录中,然后从那里进行所有调用。具有 __name__ == __main__
的函数是您的调用函数。如果您不直接从控制台调用Calls.py
或Configs.py
,而是从另一个main函数调用它们你的根目录,你应该能够将以下内容放入 Conns.py
:
# FILE: DataAcess\sqlConns.py
from Config.dataBaseConfig import * # or whatever you need to import
同样,关键是要确保您的起点是从您的项目根目录开始的。
- 不推荐:
为了避免被否决的风险,我不推荐这样做,但是 你可以将相对路径附加到你的调用中 class:
import sys, os
sys.path.append(os.path.abspath("../Config"))
from sqlConns import * # or whatever
sys.path.pop() # clear sys.path
我目前在从我的 python 项目中的其他目录导入文件时遇到问题。
我当前的文件结构是
Project
- Backend
- Config
+ __init__.py
+ databaseConfig.py
- DataAccess
+ __init__.py
+ sqlConns.py
- __init__.py
- api.py
- main.py
- setup.py
我想做的是将 /Config/databaseConfig.py 文件导入 /DataAccess/sqlConns.py 文件。尝试 运行 sqlConns.py 文件
时出现以下错误PS C:\source\repos\aaStats\aaStats> py .\Backend\DataAccess\sqlConns.py
Traceback (most recent call last):
File "C:\source\repos\aaStats\aaStats\Backend\DataAccess\sqlConns.py", line 2, in <module>
import Config.databaseConfig
ModuleNotFoundError: No module named 'Config'
我也试过使用相对导入,但我遇到了另一个错误。
PS C:\source\repos\aaStats\aaStats> py .\Backend\DataAccess\sqlConns.py
Traceback (most recent call last):
File "C:\source\repos\aaStats\aaStats\Backend\DataAccess\sqlConns.py", line 2, in <module>
from ..Config import databaseConfig as dbcfg
ImportError: attempted relative import with no known parent package
Config/databaseConfig.py 包含我想引用的数据库配置参数是我项目中的各个地方。如果我必须移动这个单个文件以使其被正确引用,这不是什么大不了的事情,但我希望稍后在我的项目中对文件使用这样的结构。
以下是有关我的文件的一些详细信息:
/Config/__init__.py
from . import databaseConfig
/DataAccess/__init__.py
from . import sqlConns
Backend/__init__.py
from . import DataAccess
from . import Config
Backend/setup.py
from setuptools import setup, find_packages
setup(
name='aaStatsApi',
version='0.1.0',
packages= ['DataAccess','Config'],
install_requires=[
'fastapi==0.63.0',
'uvicorn==0.13.4',
'requests==2.25.1',
'pyodbc==4.0.30',
]
)
- 查看 this post。
- 您无法如此轻松地执行相对导入这一事实是设计使然,无论是好是坏。理想的方法是将主脚本放在根 (
Backend
) 目录中,然后从那里进行所有调用。具有__name__ == __main__
的函数是您的调用函数。如果您不直接从控制台调用Calls.py
或Configs.py
,而是从另一个main函数调用它们你的根目录,你应该能够将以下内容放入Conns.py
:
# FILE: DataAcess\sqlConns.py
from Config.dataBaseConfig import * # or whatever you need to import
同样,关键是要确保您的起点是从您的项目根目录开始的。
- 不推荐: 为了避免被否决的风险,我不推荐这样做,但是 你可以将相对路径附加到你的调用中 class:
import sys, os
sys.path.append(os.path.abspath("../Config"))
from sqlConns import * # or whatever
sys.path.pop() # clear sys.path