我正在试用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
的魔力是如何发挥作用的?在
你是对的。无论如何,您必须告诉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库,您就会发现这样一个结构。它也可以包含导入时要运行的代码,但也可以为空。在相关问题 更多 >
编程相关推荐