如何导入自己的python文件?

时间:2017-09-13 16:06:17

标签: python python-3.x import python-import spyder

在名为BinarySearch.py的文件中,我有以下内容:

class SearchResult:    
    def __init__(self):
        self.was_found = False
        self.index = 0
    def __str__(self): 
        s = "SearchResult"
        s = s + "  was found:  "
        s = s + str(self.was_found) + "index:  " + str(self.index)
        return s

在另一个文件中,假设它名为file2.py我有:

import os
cwd = os.getcwd()
import sys
sys.path.append(cwd)

import BinarySearch

但是,当我尝试运行file2.py时,收到以下错误消息:

NameError: name 'SearchResult' is not defined

看起来import BinarySearch实际上并未导入BinarySearch

我正在使用Spyder IDE。两个文件(BinarySearch.pyfile2.py)都在同一目录中。另外,我去了工具> PYTHONPATH经理并将目录添加到路径中。我还尝试重新启动spyder以查看路径更改生效所需的内容。它仍然无效。

修改

引发错误的file2.py中的行如下:

sr = SearchResult()

最初我假设语句import BinarySearch具有相同的行为,就好像我复制了BinarySearch.py​​的全部内容并将其粘贴到import语句在file2.py中的位置。我现在看到的不是import的工作方式。

2 个答案:

答案 0 :(得分:4)

当前目录已经在路径中,您无需以任何方式明确地将其放在那里(通过IDE或通过sys.path)

在你的第二段代码中,你错过了我认为给你错误的最后一行,而且很可能是

print(SearchResult())

应该是

print(BinarySearch.SearchResult())

或者您可以将导入更改为

from BinarySearch import SearchResult

然后你可以做到

print(SearchResult())

答案 1 :(得分:0)

一个解决方案似乎是从

更改import语句
import BinarySearch

为:

from BinarySearch import *

星号/星号本质上意味着"全部导入,"从文件BinarySearch.py导入所有内容,包括SearchResult类。

常规简单导入也会导入所有内容,但会强制您通过命名空间访问内容。文件BinarySearch.py中的所有内容现在都在命名空间BinarySearch内。我们可以单独保留原始import语句,但只要我们使用来自file2.py的{​​{1}}中的内容,我们就必须添加前缀。我们的代码看起来像这样:

BinarySearch

如果我们厌倦了事先写# inside file named file2.py sr = BinarySearch.SearchResult() ,我们可以为命名空间创建一个别名,如下所示:

BinarySearch.

然后,在import BinarySearch as bs 内,语句file2.py将正常工作。