从另一个折叠导入python失败

2024-09-30 07:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在试用python,主要是对其他人的代码进行故障排除。我正在尝试运行一个程序,“path\folderA\program.py”。在

我正在从path\folderA运行程序

我收到一个错误:

ImportError: No module named fff.ggg.ppp

在程序.py包含导入:

^{pr2}$

在文件夹“path\folderB”中有: “path\folderB\fff\__init__.py” “path\folderB\fff\ggg

文件夹ggg还包含__init__.py,以及程序ppp.py

通过阅读其他帖子,比如Python error "ImportError: No module named",我理解了拥有__init__.py会使文件夹成为一个“包”,从而可以从中导入——但是它不起作用,因为我得到了一个错误。在

这一直在为其他参与这些项目的人工作,所以我的设置有问题。在

我读到一些关于目录必须在搜索路径. 这是否意味着我必须将它们添加到环境变量path中?但这意味着要在路径中添加很多目录,所以不可能。在

所以我也发现了以下几点:

import sys
sys.path.append( <path to FolderB> )

但这意味着要更改代码(对于其他人来说这不是必需的),并硬编码到本地计算机上的路径—我不应该这样做,对吗?在

我无法想象它-显然我不应该更改代码并硬编码到导入模块的物理路径-那么folderA的程序怎么知道要在folderB中查找导入?在

__init__.py的魔力是如何发挥作用的?在


Tags: pathno代码py路径程序文件夹fff
2条回答

I can't visualize it - apparently I am not supposed to change the code and hard-code the physical path to the import module - so how can a program from folderA even know to look in folderB for an import ?

你是对的。无论如何,您必须告诉python在folderB中查找导入的模块。没有__init__.py魔法可以让你从硬盘上的其他文件夹导入。在

通常,如果您有各种不同的python包,它们通过安装到python库中来工作。这样他们就可以从任何地方进口。这通常由setup.py脚本完成。检查folderB是否有一个。用python setup.py install运行它。在

如果这不起作用,我们就需要更多关于代码结构的信息。在

文件夹B必须位于搜索路径,所以您要么需要将mmm移动到A,要么修改系统路径从A内部(不确定是否有效)。__init__.py告诉python该文件夹是一个包,因此可以在带有__init__.py的文件夹中使用__init__.py的文件夹,python将其中的文件夹视为父文件夹的一部分。查看sympy或几乎任何大型python库,您就会发现这样一个结构。它也可以包含导入时要运行的代码,但也可以为空。在

相关问题 更多 >

    热门问题