从终端导入 python 文件

Import python file from terminal

我正在尝试从我的终端 运行 一个 python 文件。所以当我 运行 它时,我得到以下错误:

Traceback (most recent call last):
File "evaluate_classifier.py", line 1, in <module>
import alarm_detection.classifier_selection.classifier_evaluation as clf_eval
ImportError: No module named alarm_detection.classifier_selection.classifier_evaluation

在我的文件中我使用了这段代码:

import alarm_detection.classifier_selection.classifier_evaluation as clf_eval

如何从终端导入 python 文件 classifier_evaluation(它在不同的目录中)

谢谢。

alarm_detection 包所在的目录似乎不在您的 python 路径中。您只能从 sys.path 中包含的目录导入包和模块。 path 中包含的默认目录是当前目录(你 运行 脚本的来源)和主 python 目录,所有安装的包(如 numpy、os、math 等。 .) 在.

您可以(暂时)修改 python 路径。如果您的包 alarm_detection 包含在目录 /full/path/dir/ 中,那么您可以像这样从那里导入它:

import sys
# Adds the other directory to your python path.
sys.path.append("full/path/dir")

#Now this should work
import alarm_detection.classifier_selection.classifier_evaluation as clf_eval

您每次都需要这样做,但是,当您关闭 ose python.

的那个会话时,它不会保持添加状态

或者,您可以将该包移动到您正在使用它的同一目录中。我假设 alarm_detection 是您创建的包,不是通过 pip 下载的,或者蟒蛇什么的。

您运行正在使用的包和python程序在同一个文件夹中。如果没有,请将您的包放在同一目录中,然后再次尝试 运行 该程序。将包位置添加到系统变量路径的另一种方法。如果您不经常使用它,您只需将程序包移动到 python 程序所在的当前文件夹即可。

您有多种选择。它们都具有相同的基本效果:您想告诉 Python 在哪里可以找到您的脚本需要导入的模块。

选项 1. 在您的脚本中更改 Python sys.path。

(Limok 也指出了这一点。)如果你知道 Python 模块的绝对路径,或者你可以从相对路径计算它,那么你可以在代码中添加该路径 在您的脚本尝试导入模块之前

import sys
sys.path.append('/path/containing/the/module/you/want/to/import')
# You can also manipulate sys.path in various ways:
sys.path.insert(0, '/path/to/search/before/other/locations')
sys.path.remove('/path/you/don't/want/to/search')

通过摆弄 sys.path,您可以获得一些非常惊人(和令人困惑)的效果。但是要小心,因为这可能会让其他人在以后尝试阅读和维护您的代码时感到困惑。 ("Where did this module come from??")

选项 2. 更改 PYTHONPATH 环境变量。

bashshell中,就这么简单

export PYTHONPATH=$PYTHONPATH:/path/containing/the/module/you/want/to/import
python yourscript.py

这对sys.path有同样的效果,但它不会让你的脚本负责配置它自己的环境;这是一个更简洁的实现,因为您可以 运行 在多台机器上使用相同的脚本,而不必破解脚本本身。只需将文件复制到另一台机器并在 运行 脚本之前设置 PYTHONPATH

这在大多数 shell 中都是微不足道的。在 Windows 中,您可能需要使用 GUI 来设置环境变量 PYTHONPATH

选项 3。使用 .pth 文件。

Python 查看 PYTHONPATH 变量以在启动时设置其 sys.path 列表。但它也会在 Python site-packages 文件夹中寻找特殊的 .pth 文件。 (如果您不知道 site-packages 文件夹在哪里,那可能是另一个 Whosebug 问题。)

最简单的 .pth 文件包含一行文件路径:

/path/containing/the/module/you/want/to/import

Python 将选择它并将其添加到 sys.path 列表。

这些 .pth 文件可以做更多的事情,但这超出了您现在的需要。如果您好奇,Bob Ippoli 在这里提供了更多详细信息: http://bob.ippoli.to/archives/2005/02/06/using-pth-files-for-python-development/

选项 4:使用虚拟环境。

这不是您当前问题的直接解决方案,但我提到它是为了完整性。 Python 虚拟环境允许您将应用程序的所有依赖项包含在一个独立的隔离室中。以上所有内容(选项 1 到 3)仍然适用于虚拟环境,但有时虚拟环境有助于保持整洁......并且易于理解。

如果可以使用virtualenvwrapper,虚拟环境管理就变得轻而易举了。否则,您可以使用低级 virtualenv (Python 2) 和 pyenv (Python 3) 而无需太多痛。