Python:如何从另一个文件夹导入脚本,而该文件夹又在本地导入具有相对路径/本地文本文件的其他脚本?

时间:2019-04-04 17:12:53

标签: python python-2.7 python-import

我得到了一个可以自行运行的python程序。这种结构使得存在一个.py文件(称为 app.py ),该文件从附近的文件夹中导入了许多其他脚本,并使用它们来完成某些工作。这些其他模块具有本地config.txt文件,并且还导入其他本地模块。

我想在导入“ app.py”的其他地方有自己的脚本,然后从中调用一个函数。问题是:我想调用的函数取决于相对导入到app.py本身的其他模块,当我尝试将app.py导入到脚本时,是告诉我找不到该应用程序的相对导入。 py有。

我做了很多挖掘工作(添加了 __ init.py __ 文件,使用system.path.append /插入我现在很熟悉的东西),我发现当我尝试运行我的脚本,它将成为当前工作目录,并且找不到从app.py导入的任何相对目录(由我的脚本导入),因为它不存在,很简单。

我能做些什么,我可以使用绝对路径导入所有内容,或将每个软件包/文件夹添加到系统路径,但是由于有10多个软件包,我不想这样做。如果我移动app.py及其周围的模块,这也将确实有问题。

app.py非常独立,可以放在任何地方。我将不胜感激,以任何形式的建议都可以很好/优雅地解决这个问题。

TL; DR :我有一个脚本试图在另一个目录中导入另一个脚本,但是它也导入具有相对路径的其他脚本。我尝试导入的脚本已导入,但无法导入通常导入的其他脚本。

1 个答案:

答案 0 :(得分:0)

一种变体是在app.py中指定PYTHONPATH所在的目录。

假设您具有以下文件:

yourscript.py ->可以在系统上的任何位置

import app
app.dosomething()

somepackage / app.py

import somemod
from subpack import innermod

def dosomething():
    somemod.x()
    othermod.y()

somepackage / somemod.py

def x():
    print("XXX")

somepackage / subpack / innermod.py

def y():
    print("YYYY")

现在,如果您像这样致电yourscript

PYTHONPATH=<path_to_your_somepackage> python yourscript.py

它将解析脚本中与PYTHONPATH所在的路径somepackage相关的依赖性。