我正在尝试从终端运行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(它位于不同的目录中)
感谢。
答案 0 :(得分:2)
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
每次都需要这样做,但是当你关闭python会话时它不会保持添加。
或者,您可以将该程序包移动到您正在使用它的同一目录中。我假设所有这些alarm_detection
是您创建的程序包并且不是由pip或anaconda或其他东西下载。
答案 1 :(得分:0)
您正在运行的包和python程序位于同一文件夹中。如果没有,请将您的包放在同一目录中,并尝试再次运行该程序。将包位置添加到系统变量路径的另一种方法。如果您不经常使用它,您只需将包移动到当前存在python程序的文件夹即可。
答案 2 :(得分:0)
您有几种选择。它们都具有相同的基本效果:您想告诉Python在哪里找到您的脚本需要导入的模块。
(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
,你可以实现一些非常惊人(和令人困惑)的效果。但要小心,因为对于试图稍后阅读和维护代码的其他人来说,这可能会让人感到困惑。 (“这个模块来自哪里?”)
在 bash shell中,这就像
一样简单export PYTHONPATH=$PYTHONPATH:/path/containing/the/module/you/want/to/import
python yourscript.py
这对sys.path
具有相同的效果,但它不会使您的脚本负责配置自己的环境;这是一个更清洁的实现,因为你可以在多台机器上运行相同的脚本,而不必破解脚本本身。只需将文件复制到另一台计算机,然后在运行脚本之前设置PYTHONPATH
。
这在大多数炮弹中都是微不足道的。在Windows中,您可能需要使用GUI来设置环境变量PYTHONPATH
。
.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/
这不是直接解决您当前问题的方法,但我提到它是为了完整性。 Python虚拟环境允许您在独立的隔离室中包含应用程序的所有依赖项。以上所有(选项1到3)仍然适用于虚拟环境,但有时虚拟环境有助于保持整洁......并且可以理解。
如果您可以使用 virtualenvwrapper ,它可以轻松实现虚拟环境管理。否则,您可以毫不费力地使用低级 virtualenv (Python 2)和 pyenv (Python 3)。