我正试图从我的终端运行一个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文件分类器评估(它在另一个目录中)
谢谢。
似乎
alarm_detection
包所在的目录不在python路径中。只能从sys.path
中包含的目录导入包和模块。path中包含的默认目录是当前目录(运行脚本的位置)和所有安装包(如numpy、os、math等)所在的主python目录。您可以(临时)修改python路径。如果您的包
alarm_detection
包含在目录/full/path/dir/
中,那么您可以从那里导入它,如下所示:但是,您每次都需要这样做,当您关闭python会话时,它不会一直被添加。
或者,您可以将该包移动到正在使用它的同一目录中。在这一切中,我假设
alarm_detection
是您创建的一个包,不是由pip或anaconda或其他东西下载的。你有几个选择。它们都具有相同的基本效果:您想告诉Python在哪里找到脚本需要导入的模块。
选择1。在脚本中更改Python sys.path
(Limok也指出了这一点。)如果您知道Python模块的绝对路径,或者您可以从相对路径计算它,那么您可以在脚本尝试导入模块之前在代码中添加该路径。
通过摆弄
sys.path
,您可以获得一些相当惊人(和混乱)的效果。但是要小心,因为这可能会让以后试图阅读和维护您的代码的其他人感到困惑。(“这个模块是从哪里来的?”)选择2。更改PYTHONPATH环境变量
在bashshell中,这非常简单
这对
sys.path
也有同样的效果,但它不会使脚本负责配置自己的环境;这是一种更干净的实现,因为您可以在多台计算机上运行相同的脚本,而不必对脚本本身进行黑客攻击。在运行脚本之前,只需将文件复制到另一台计算机并设置PYTHONPATH
。在大多数shell中,这是非常微不足道的。在Windows中,您可能需要使用GUI来设置环境变量
PYTHONPATH
。选择3。使用
.pth
文件。Python查看
PYTHONPATH
变量以在启动时设置其sys.path
列表。但它也会在Python的site packages文件夹中查找特殊的.pth
文件。(如果您不知道site packages文件夹在哪里,那么这可能是另一个StackOverflow问题。)最简单的
.pth
文件包含一行文件路径: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程序所在的当前文件夹中。
相关问题 更多 >
编程相关推荐