Модуль импортирован в одну функцию NameError в другую функцию, вызванную впоследствии - PullRequest
0 голосов
/ 20 января 2019

У меня есть скрипт Python3, который устанавливает pip3, и модуль digitalocean для создания капель.

Я разбил скрипт на 3 функции: Install (), Run () и Uninstall.В функции Install я могу установить 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 голосов
/ 20 января 2019

Оказывается, вам нужно ТОЛЬКО сказать, что модуль импорта будет глобальным.

Измените Run () на:

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

    Install() 
    CreateDroplet()
...