Python导入并运行位于不同目录中的python脚本[重复]

Posted

技术标签:

【中文标题】Python导入并运行位于不同目录中的python脚本[重复]【英文标题】:Python import and run a python script that is in a different directory [duplicate] 【发布时间】:2019-01-18 07:54:09 【问题描述】:

我目前有一个使用 tkinter 制作的 GUI,允许用户选择单选按钮,这些单选按钮将导入执行不同功能的不同 python 脚本。其中一些脚本位于同一目录中,因此导入不是问题,但我在不同的目录中有一些脚本(由于依赖关系必须留在那里),但希望用户能够从中选择此脚本GUI 让它运行而不是他们必须进入终端并以这种方式运行脚本。

更多详情: 我当前的文件在 Finance/Ingest 中,而我在 dw/ 中有一个脚本 combine.py。

我想要的: 我有单选按钮,当用户单击提交按钮时,它调用此函数,该函数获取单选按钮值。如果值 == 1,那么我希望它导入脚本并运行它。以下是我目前拥有的,但它一直说“找不到模块 dw”。任何帮助将不胜感激!!!

def Rel_Button():
     Run_DB_Rel_Parse = DB_Rel_Parse.get()
     Run_DB_Req_Rel = DB_Req_Rel.get()
     Ingest_DB_Rel = DB_Rel.get()

     if Run_DB_Rel_Parse == 1:
          import dw.combine

【问题讨论】:

【参考方案1】:

Python 沿着 python 路径查找模块。您可以通过多种方式进行设置。

将 PYTHONPATH 环境变量设置为指向包含 dw 的目录 将 dw 添加到您通过 pip/setuptools 安装的 python 包中 在你的程序中设置sys.path指向包含dw的目录

最后一个解决方案并不理想,但通常最容易实施。假设您的模块位于../../dependencies/library。由于sys.path 是一个可修改的列表,您可以这样做:

import sys
from os.path import abspath, dirname, join
sys.path.insert(0, abspath(join(dirname(__file__), '..', '..', 'dependencies', 'library')))

请注意,这假定 dw 模块是一个正确的 python 包。它应该是 dw.py 或名为 dw 的目录,其中包含一个名为 __init__.py 的文件(可以为空)。

但是,如果您要将它用作其他人将要运行的东西,则最好打包您的模块并通过 pip 安装它们。

【讨论】:

以上是关于Python导入并运行位于不同目录中的python脚本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python中的多存储库管道

当文件位于同一目录并调用脚本时,导入不起作用

将python模块导入databricks中的python脚本

Python 在运行测试时导入 src 模块

通过不同目录多次运行python脚本的最佳方法?使用视窗

目录树中不同级别的CORBA python文件而不是导入它们的模块