代码之家  ›  专栏  ›  技术社区  ›  Sembei Norimaki

从同级文件夹导入模块

  •  0
  • Sembei Norimaki  · 技术社区  · 5 年前

    我在一个存储库中有一个python项目,它需要从其他存储库导入一些类。 因为它们是不同的存储库,所以它们需要保持在同一目录级别。

    repos
        |- my_project 
             |- main.py
        |- foo_folder
             |- foo.py
        |- bar_folder
             |- bar.py
    

    myproject/main.py Foo_Class foo_folder/foo.py Bar_Class bar_folder/bar.py .

    import sys
    sys.path.insert(0, '../foo_folder')
    sys.path.insert(0, '../bar_folder')
    

    那我就可以了

    from foo_folder.foo import Foo_Class
    from bar_folder.bar import Bar_Class
    

    PEP8: module level import not at top of file
    

    我还可以在我的_项目中创建一个foo的快捷方式和一个bar的快捷方式,这样系统会将这些模块视为子文件夹。

    不过,这看起来又像一个黑客,我将不得不添加这个快捷方式 .gitignore

    我不知道为什么,但如果我复制foo文件夹并命名它 copy_of_foo_folder 然后我可以导入它,但是如果我创建了foo的快捷方式,我就不能导入。

     |- my_project 
                 |- shortcut_to_foo_folder
                 |- copy_of_foo_folder
                 |- main.py
    
    from copy_of_foo_folder.foo import Foo   # WORKS
    from shortcut_to_foo_folder.foo import Foo   # FAILS
    
    ModuleNotFoundError: No module named 'shortcut_to_foo_folder'
    

    1 回复  |  直到 5 年前
        1
  •  0
  •   ParthS007    5 年前

    你必须包括 __init__.py 在每个目录中。

    repos
        |- my_project 
             |- main.py
             |- __init__.py
        |- foo_folder
             |- foo.py
             |- __init__.py
        |- bar_folder
             |- bar.py
             |- __init__.py
        __init__.py
    

    请看一下我以前的回答,关于应该包括什么 __初始值 https://stackoverflow.com/a/56732285/7994074