从另一个目录导入类 - Python

4

当前位置:ProjectName/src

类位置:ProjectName/Factory Modules/Factory Classes

尝试1:

from FactoryClass1 import FactoryClass1

尝试2:

import sys
sys.path.append(path_to_classes_folder)
from FactoryClass1 import FactoryClass1

然而,我一直收到“ImportError:未找到名为 PointSet 的模块”的错误信息。

为了能够使用类中的函数,应该如何编写导入语句?


是的,在发帖之前我确实进行了搜索,但我还没有成功让它工作。 - Elia
Project Name 目录中是否只包含 Python 源代码?如果是,您可以考虑将其转换为包。工厂模块和类的使用方式是什么?是的,您可以在 sys.path 中搞些鬼,但除非您知道自己在做什么,否则可能会破坏未来的可扩展性。请提供有关 Project Name 内容的更多信息。您的 main 位于哪里? - OozeMeister
项目名称还包含其他文件格式(如txt、pts、csv、dxf等)。我只需要将这些类作为模块导入,并使用它们所包含的函数。主要代码位于src/TryNewFunctions中。 - Elia
1个回答

1
你可以尝试这样做:

import os.path, sys
# Add current dir to search path.
sys.path.insert(0, "dir_or_path")
# Add module from the current directory.
sys.path.insert(0, os.path.dirname(os.path.abspath(os.path.realpath(__file__))) + "/dir")

这将把您的目录添加到Python搜索路径中。然后,您可以像往常一样导入。

要查看已添加的路径,请检查:

import sys
from pprint import pprint
pprint(sys.path)

如果还是不起作用,请确保您的模块是有效的 Python 模块(应该在目录中包含__init__.py文件)。如果没有,请创建空白文件。

除了直接内联加载类之外,在Python 3中您还可以使用exec(),例如:

exec(open(filename).read())

在Python 2中:execfile()
参见:Python 3.2+中的execfile替代方法?
如果您从命令行运行脚本,您还可以通过定义PYTHONPATH变量来指定Python路径,这样Python就可以在提供的目录中查找模块,例如:
PYTHONPATH=$PWD/FooDir ./foo.py

如需其他解决方案,请查看:如何导入其他 Python 文件?


我尝试了一下,得到的第一个路径是: 'C:\Users\##\workspace\Project_Name\src\Factory Modules\Factory Classes''但我仍然遇到了相同的错误:'ImportError: No module' - Elia
@Elia 也许你的模块不是一个模块。请确保你添加的模块路径包含 __init__.py 文件。 - kenorb
@Elia,从Python导入的每个模块都应该包含__init__.py。还要记住在sys.path中所有路径都应该是绝对路径,所以可能你正在使用相对路径。如果你遇到了一些具体的不起作用的情况,请重新编辑问题并提供关于类位置的更多详细信息(在这种情况下它无法工作)。 - kenorb
我的意思是每个模块都包含在类内部的__init__,而不是作为单独的文件。 - Elia
1
好的... 这似乎没有任何意义,但它起作用了... 谢谢 @kenorb - Elia
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接