Импорт класса из другого скрипта python

#python

Вопрос:

Это algorithmia_utils.py файл с классом AlgorithmiaUtils

 class AlgorithmiaUtils:

def __init__(self, api_key, username, algo_name, local_dir):
    self.api_key = api_key
    self.username = username
    self.algo_name = algo_name
    self.local_dir = local_dir

    self.algo_namespace = f"{self.username}/{self.algo_name}"
    self.algo_script_path = "{}/{}/src/{}.py".format(
        self.local_dir, algo_name, algo_name
    )
    self.dependency_file_path = "{}/{}/{}".format(
        self.local_dir, algo_name, "requirements.txt"
    )

    self.algo_client = Algorithmia.client(self.api_key)

def upload_model_to_algorithmia(
    self, local_path, algorithmia_data_path, model_name
):
    if not self.algo_client.dir(algorithmia_data_path).exists():
        self.algo_client.dir(algorithmia_data_path).create()
    algorithmia_path = "{}/{}".format(algorithmia_data_path, model_name)
    result = self.algo_client.file(algorithmia_path).putFile(local_path)
 

Я хочу использовать функцию upload_model_to_algorithmia из другого сценария.

Таким образом, я пытаюсь:

 import Algorithmia
import algorithmia_utils as algo_utility
 

И чтобы вызвать функцию:

 algo_utility.AlgorithmiaUtils.upload_model_to_algorithmia(
    local_path = local_path, 
    algorithmia_data_path = algorithmia_data_path, 
    model_name = model_name)
 

Что возвращает ошибку:

 TypeError: upload_model_to_algorithmia() missing 1 required positional argument: 'self'
 

Должен ли я добавить дополнительный аргумент или я неправильно импортировал файл, и как это исправить?

Спасибо!

Редактировать:

Это выглядит очень просто, но до сих пор нет решения.

 import Algorithmia
import algorithmia_utils as algo_utility
from algorithmia_utils import AlgorithmiaUtils as xpto
 

И:

 xpto.upload_model_to_algorithmia(
    local_path = local_path, 
    algorithmia_data_path = algorithmia_data_path, 
    model_name = model_name)
 

Верните ошибку:

 TypeError: upload_model_to_algorithmia() missing 1 required positional argument: 'self'
 

Комментарии:

1. Это метод экземпляра, а не функция. Вам нужен экземпляр AlgorithmiaUtils , чтобы вызвать его.

2. Хорошо @chepner, но не могли бы вы уточнить? Я пытаюсь это понять

3. Я отсылаю вас к учебнику по Python, особенно к этому разделу о классах .

Ответ №1:

сделай это,

 from algorithmia_utils import AlgorithmiaUtils
 

Сначала создайте объект класса,

 algoutil = AlgorithmiaUtils(api_key = api_key, 
    username = username, 
    algo_name = algo_name,
    local_dir = local_dir,)
 

Теперь вы создали объект с именем algoutil , который относится к классу AlgorithmiaUtils, у него есть все методы, доступные этому классу.

Затем вы делаете это, чтобы запустить свою функцию,

 algoutil.upload_model_to_algorithmia(local_path = local_path, 
    algorithmia_data_path = algorithmia_data_path, 
    model_name = model_name
)

 

Вам необходимо заменить аргументы в кавычках после знаков равенства необходимой информацией.

Я думаю, что вы получили код от https://github.com/algorithmiaio/model-deployment/blob/master/xgboost_notebook_to_algorithmia/algorithmia_utils.py но основной сервис размещен здесь, в algorithmia, https://algorithmia.com/developers/clients/python если я не ошибаюсь, вам нужно пойти туда, создать учетную запись, получить ключ api и вставить его в код. Например, это выглядело бы примерно так,

 from algorithmia_utils import AlgorithmiaUtils

algoutil = AlgorithmiaUtils(api_key = '8hf81qhg3t8h12f', 
    username = 'unstuck', 
    algo_name = 'algo1',
    local_dir = '/home/docs/whatever',)

algoutil.upload_model_to_algorithmia(local_path = '/home/docs/whatever/algo.csv', 
    algorithmia_data_path = '/path/to/file', 
    model_name = 'model1'
)
 

Я уже ответил на ваш вопрос о том, как создать объект и использовать его, но вам нужно ввести правильные аргументы о том, как заставить его работать, прочитав документацию, это совсем другой вопрос.

Комментарии:

1. Спасибо за помощь, но я получаю ту же ошибку

2. в нем говорится (upload_model_to_algorithmia() отсутствует 1 необходимый позиционный аргумент: ‘self, означает, что вы не создали его должным образом

3. Я получаю ошибку: ошибка типа: __init__() отсутствуют 4 обязательных позиционных аргумента: ‘api_key’, ‘имя пользователя’, ‘algo_name’ и ‘local_dir’ в строке algoutil = AlgorithmiaUtils()

4. я не могу видеть ваш код… вам необходимо включить 4 аргумента: «api_key», «имя пользователя», «имя пользователя» и «local_dir», которые вы указали, local_path = local_path, algorithmia_data_path = algorithmia_data_path, имя_модели = имя_модели

5. Я просто пытаюсь следовать учебнику, который полон таких утечек, как эта, и пытаюсь найти какой-то смысл, спасибо за вашу помощь!