从项目目录导入包

时间:2020-09-27 03:38:42

标签: python pipenv python-packaging

我具有以下文件结构:

13

Project app.py package_A __init__.py a_module.py package_B __init__.py b_module.py package_C __init__.py c_module.py packageD __init__.py d_module.py 内,我正在运行以下导入命令:

d_module.py

我不断收到from package_C.c_module import someFunc。从项目目录中使用pipenv shell到项目目录中添加ModuleNotFoundError: No module named 'package_C',我尝试了许多不同的方法。同时创建一个虚拟环境。

现在,因为我刚启动项目,所以app.py文件为空,是问题吗?

2 个答案:

答案 0 :(得分:0)

对于像pycharm这样的IDE,它将自动将父目录添加到路径,因此,手动运行时,由于未在父目录中列出,因此将找不到软件包。

请参见以下示例:

# file: B.__init__.py

try:
    from A import a
    print("IDE import")
except ImportError:
    from os import getcwd
    from sys import path

    path.append(getcwd() + "/..")
    from A import a
    print("without IDE")

print(a)

文件夹结构:
color is always beautiful

输出-在IDE中:

IDE import
<module 'A.a' from 'Z:\\github\\StackOverFlow\\A\\a.py'>

终端输出:

without IDE
<module 'A.a' from 'Z:\\github\\StackOverFlow\\B/..\\A\\a.py'>

当目录再次嵌套在项目目录中时,这种情况也会改变,在这种情况下,它将始终与except块中使用的路径插入一起导入。

答案 1 :(得分:0)

我猜测[...assetListItems] .filter(item => item.id !== id) .map((item, index) => ({ ...item, id: index, })); 文件夹中的__init__.py是空白吗?

仅将package_C放在package文件夹中并不会自动授予您访问包中所有模块的权限。您只能访问__init__.py文件中导入的模块。

这是因为导入包时,python运行__init__.py文件中的所有模块,并将它们添加到符号表中。

如果在__init__.py文件中添加import c_module,则应该能够从__init__.py导入任何对象。