【问题标题】:Importing classes from another directory - Python从另一个目录导入类 - Python
【发布时间】:2015-04-04 14:34:29
【问题描述】:

当前位置:项目名称/src

类位置:项目名称/工厂模块/工厂类

尝试1:

from FactoryClass1 import FactoryClass1

尝试2:

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

但是我不断收到“ImportError: No module named PointSet”。

应该如何编写导入语句才能使用类中的函数?

【问题讨论】:

  • 是的,我在发布之前先进行了搜索,但还没有成功。
  • Project Name 目录是否只包含 Python 源代码?如果是这样,您可以考虑将其转换为一个包。预计如何使用工厂模块和类?是的,您可以随意使用sys.path,但除非您知道自己在做什么,否则您可能真的搞砸了您未来的可扩展性。提供有关Project Name 内容的更多信息。您的main 在哪里?
  • 项目名称也包含其他文件格式(txt、pts、csv、dxf...)我应该简单地将类作为模块导入并使用它们包含的函数。主要位于在 src/TryNewFunctions

标签: python pydev


【解决方案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()

见:Alternative to execfile in Python 3.2+?


如果您从命令行运行脚本,您还可以通过定义 PYTHONPATH 变量来指定 Python 路径,以便 Python 可以在提供的目录中查找模块,例如

PYTHONPATH=$PWD/FooDir ./foo.py

查看替代解决方案:How to import other Python files?

【讨论】:

  • 我试过了,第一个路径是:'C:\\Users\\##\\workspace\\Project_Name\\src\\Factory Modules\\Factory Classes'' I仍然得到相同的错误'ImportError: No module
  • @Elia 也许你的模块不是模块。确保添加的模块路径包含__init__.py
  • 好吧,没有一个文件夹包含__init__.py 如果我在类文件夹中创建新的xx.py 然后使用:import FactoryClass1 导入它,那么一切似乎都很好。但是我无法从该文件夹外的xx.py 文件中导入它。
  • @Elia 从 Python 导入的每个模块都应该包含 __init__.py。还要记住sys.path 中的所有路径都应该是绝对的,所以也许你正在使用相对路径。如果您有一些特定的无效案例,请重新编辑问题,并提供有关您的课程位置的更多详细信息(在这种情况下它不起作用)。
  • 嗯......这没有任何意义,但它有效......谢谢@kenorb
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2017-05-04
  • 2014-02-21
  • 2020-07-28
相关资源
最近更新 更多