无法从其他文件夹导入模块

时间:2021-03-10 21:25:49

标签: python import python-import

我目前在从 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

后端/__init__.py

from . import DataAccess
from . import Config

后端/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',
    ]
)

1 个答案:

答案 0 :(得分:0)

  1. 查看this post
  2. 您无法如此轻松地执行相对导入的事实是设计使然,无论好坏。理想的方法是将主脚本放在根 (Backend) 目录中,然后从那里执行所有调用。具有 __name__ == __main__ 的函数是您的调用函数。如果您不直接从控制台调用 Calls.pyConfigs.py,而是从根目录中的另一个 main 函数调用它们,您应该能够将以下内容放入 Conns.py
# FILE: DataAcess\sqlConns.py
from Config.dataBaseConfig import * # or whatever you need to import

同样,关键是确保您的起点在您的项目根目录中。

  1. 不推荐: 为了避免被否决的风险,我不建议这样做,但是您可以将相对路径附加到您的调用类
import sys, os
sys.path.append(os.path.abspath("../Config"))
from sqlConns import * # or whatever
sys.path.pop() # clear sys.path
相关问题