Python 仅从文件导入特定函数

Python 仅从文件导入特定函数,python,python-import,python-module,Python,Python Import,Python Module,我有一个文件,foo.py import UnavailableModule class Bob: def useful_func(self, arg): # Do useful stuff (doesn't use UnavailableModule) 在同一目录下的另一个文件bar.py中,我需要有用的函数(),但不能这样做 from foo.Bob import useful_func 因为它会导致 problem: [Error 126] The speci

我有一个文件,
foo.py

import UnavailableModule

class Bob:
    def useful_func(self, arg):
        # Do useful stuff (doesn't use UnavailableModule)
在同一目录下的另一个文件
bar.py
中,我需要
有用的函数()
,但不能这样做

from foo.Bob import useful_func
因为它会导致

problem: [Error 126] The specified module could not be found
An exception has occurred, use %tb to see the full traceback.
带回溯

C:\...\bar.py in <module>()
----> 1 from foo.Bob import useful_func
C:\...\foo.py in <module>()
----> 1 import UnavailableModule
C:\…\bar.py in()
---->1从foo.Bob导入有用的函数
C:\…\foo.py in()
---->1导入不可用模块

是否可以仅通过其他方式获取
有用的函数()

首先,您的
有用的函数是一个实例方法,您可以使用整个
Bob
类导入它,如下所示:

from foo import Bob
然后您可以创建
Bob
的对象,并使用如下函数:

b = Bob()
b.useful_func('something useful i believe')
但这并不能解决你的问题。正如我所读到的,您的问题是导入
UnavailableModule
是在导入
foo
模块时运行的

好的,它将运行,因为导入就是这样工作的,您可以使用以下构造阻止此导入:

class Bob:
  def useful_func(self, arg):
      pass

if __name__ == '__main__':
  import UnavailableModule

这将防止从另一个模块导入
foo
模块时导入您的
UnavailableModule
。然而,我不确定这是否是一种好的做法。不过它可以工作。

嗯,首先,
有用的_func
是一个方法,因此您必须导入定义它的类
Bob
。其次,当您导入时,文件的内容总是运行的,您不能只运行部分文件。此外,您不能从foo.Bob
导入任何
,因为您不能从类导入
。为什么
foo.py
试图导入
不可用的模块
?如果
foo.py
需要
UnavailableModule
,为什么你没有这个模块?@user2357112这涉及到Windows Linux子系统是一个很长的故事。那么,你需要要么获得
UnavailableModule
,要么改变
foo.py
,不假设模块存在。