从term导入python文件

2024-05-17 07:00:48 发布

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

我正试图从我的终端运行一个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文件分类器评估(它在另一个目录中)

谢谢。


Tags: 文件import终端as错误evalmoduleclf
3条回答

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

您可以(临时)修改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

但是,您每次都需要这样做,当您关闭python会话时,它不会一直被添加。

或者,您可以将该包移动到正在使用它的同一目录中。在这一切中,我假设alarm_detection是您创建的一个包,不是由pip或anaconda或其他东西下载的。

你有几个选择。它们都具有相同的基本效果:您想告诉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,您可以获得一些相当惊人(和混乱)的效果。但是要小心,因为这可能会让以后试图阅读和维护您的代码的其他人感到困惑。(“这个模块是从哪里来的?”)

选择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文件夹在哪里,那么这可能是另一个StackOverflow问题。)

最简单的.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),而不会有太大的痛苦。

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

相关问题 更多 >