【问题标题】:Get path of importing module获取导入模块的路径
【发布时间】:2018-03-03 23:44:05
【问题描述】:

我有两个 python 文件:main.py 和imported.py。我想将imported.py导入main.py,但我想访问imported.py文件中main.py的路径。那就是我想访问导入模块的路径。例如:

#main.py
import imp
imported = imp.load_source('imported', "/absolute/path/to/imported.py")

#imported.py
pathToImportingModule=os.path.??? 
doSomethingWithPath(pathToImportingModule)

【问题讨论】:

  • 这个问题好像类似,没有答案:stackoverflow.com/questions/43081310/…
  • 这看起来像是 X-Y 问题。你到底想做什么?
  • imported.py 是一个我会经常运行的通用脚本。该脚本将执行与 main.py 所在文件夹相关的任务。例如,它将在 main.py 所在的文件夹中创建一个新文件夹,并在该文件夹中创建文件。我知道我可以简单地使用 os.path.dirname(os.path.abspath(os.path.realpath(file))) 和然后将其传递给imported.py,但我想知道是否有办法自动执行此操作。
  • @user1763510。怎么样:os.path.abspath(sys.modules['__main__'].__file__)?
  • @user1763510 很高兴您找到了解决方案。我希望您不介意我是否提供替代方案:将 main.py 与 import.py 放在一起,不要使用 imp.load_source,不要在 main.py 所在的同一文件夹中执行操作 " ",改为在当前工作目录中执行操作,或者将工作目录作为参数。这样一来,您将拥有更易于维护的逻辑设置。

标签: python import python-import


【解决方案1】:

我不知道任何“导入”通知挂钩。 您可以通过在导入的模块中显式调用函数来实现一些类似的事情:

#main.py
import imp
import sys
import os

imported = imp.load_source('imported', "/absolute/path/to/imported.py")
imported.doSomething(os.path.abspath(sys.modules[__name__].__file__))

#imported.py
def doSomething(importing_path):
   print ("Importing path: ", importing_path)
   pass

【讨论】:

    【解决方案2】:

    从 ekhumoro 在 cmets 中收到的解决方案:

    #main.py
    import imp
    imported = imp.load_source('imported', "/absolute/path/to/imported.py")
    
    
    #imported.py
    pathToImportingModule=os.path.abspath(sys.modules['__main__'].__file__)    
    doSomethingWithPath(pathToImportingModule)
    

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2018-06-04
      • 2010-09-21
      相关资源
      最近更新 更多