在一个函数NameError中导入模块,然后在另一个函数中导​​入

时间:2019-01-20 07:33:31

标签: python-3.x function import module

我有一个安装pip3的Python3脚本和一个用于创建液滴的digitalocean模块。

我将脚本分为3个函数,即Install(),Run()和Uninstall。在安装功能中,我可以安装pip3和digitalocean模块。

我想在Run()函数中调用多个函数。 在Run()的开始,我导入了digitalocean模块。当我调用使用此模块的另一个函数时,出现“ NameError:未定义名称'digitalocean'”。

我读过的所有内容都说我可以导入一个函数,然后在另一个函数中使用该导入。我不知道Python3是否不同?我缺少什么?(必须)

这里是相关的代码,已撤出大量代码。让我知道您是否需要更多。

#!/usr/bin/python3

import importlib.util
from subprocess import Popen, PIPE, STDOUT
import sys
import subprocess
import time


accessToken                 = 'ABC'
dropletName                 = 'newDropletAndTag'
tagName                     = dropletName

def Install():
    pass
    #This function installs the package and other things if they are not already present. 


def CreateDroplet():
    newDroplet = digitalocean.Droplet(  token       = accessToken, 
                                        name        = dropletName,
                                        region      = 'NYC1',
                                        image       = 'ubuntu-16-04-x64',
                                        size_slug   = 's-1vcpu-1gb',
                                        ssh_keys    = sshKeysList, 
                                        backups     = False
                                        )    

def Run():
    import digitalocean
    myManager = digitalocean.Manager(token=accessToken)
    myDroplets = myManager.get_all_droplets(tag_name=tagName)

    Install() 
    CreateDroplet()


def Main():
    #START OF SCRIPT
    print('\n\n\n')
    print('---- Start Of Script ----')
    Run()
    print('---- End Of Script ----')
    print('\n\n\n')
    #END OF SCRIPT
if __name__ == '__main__':
    Main()

1 个答案:

答案 0 :(得分:0)

原来,您需要明确地说导入模块将是全局的。

将Run()更改为:

def Run():
    global digitalocean
    import digitalocean
    myManager = digitalocean.Manager(token=accessToken)
    myDroplets = myManager.get_all_droplets(tag_name=tagName)

    Install() 
    CreateDroplet()