Імпорт файлів .py у Google Colab


83

Чи є спосіб завантажити мій код у файли .py та імпортувати їх у комірки коду colab?

Інший спосіб, який я знайшов, - це створити локальний блокнот Jupyter, а потім завантажити його на Colab, чи це єдиний спосіб?

Відповіді:


99

Спочатку його можна зберегти, а потім імпортувати.

from google.colab import files
src = list(files.upload().values())[0]
open('mylib.py','wb').write(src)
import mylib

Оновлення (листопад 2018 р.): Тепер ви можете легко завантажувати до

  • клацніть на [>], щоб відкрити ліву панель
  • виберіть вкладку файлу
  • натисніть [завантажити] та оберіть [mylib.py]
  • імпортувати mylib

Оновлення (жовтень 2019): Якщо ви не хочете завантажувати кожен раз, ви можете зберігати його в S3 і монтувати на Colab, як показано в цій суті

Оновлення (квіт. 2020 р.): Тепер ви можете автоматично встановити свій Google Drive. Просто скопіювати його з Диска, ніж завантажити.

  • Зберігайте mylib.pyна своєму Диску
  • Відкрийте нову Colab
  • Відкрийте (ліву) бічну панель, виберіть Filesвид
  • Клацніть Mount DriveтодіConnect to Google Drive
  • Скопіюйте його до !cp drive/MyDrive/mylib.py .
  • import mylib

@rsam Тоді спробуйте другий спосіб. Я спробував, і у мене це вийшло.
korakot

files.upload () наразі не працює у Firefox. Альтернативний спосіб - завантажити його на Google Drive, а потім завантажити з ноутбука за допомогою PyDrive.
Олексій Тигарєв

2
Якщо ви використовуєте метод вкладки файл, вам доведеться повторювати завантаження кожного часу виконання
information_interchange

1
Тепер я додаю метод, щоб зберігати його в S3, тому вам не потрібно завантажувати знову.
коракот

5
@eswaraamirthans Ви забуваєте крапку "." в кінці.
korakot

56

Якщо комусь ще цікаво дізнатись, як імпортувати файли / пакети з gdrive всередину Google Colab. Для мене спрацювала наступна процедура:

1) Встановіть свій google-диск в Google colab:

from google.colab import drive
drive.mount('/content/gdrive/')

2) Додайте каталог до шляху до python за допомогою sys:

import sys
sys.path.append('/content/gdrive/mypythondirectory')

Тепер ви зможете імпортувати матеріали з цього каталогу!


11
  1. Ви можете завантажувати локальні файли в Google Colab, використовуючи функцію upload () у google.colab.files
  2. Якщо у вас є файли на github, клонуйте репо за допомогою! Git clone https://github.com/username/repo_name.git . Тоді так само, як у ноутбуці jupyter, завантажуйте його за допомогою магічної функції % load %load filename.py .

1
Другий метод у мене спрацював, мені просто довелося додати назву репо:%load repo_name/filename.py
xyzjayne

1
@xyzjayne ти намагався його імпортувати? Я можу завантажити його чудово, але не можу використовувати як модуль
information_interchange

9

На основі відповіді Коракота Чаоваваніча я створив функцію нижче для завантаження всіх файлів, необхідних в екземплярі Colab.

from google.colab import files
def getLocalFiles():
    _files = files.upload()
    if len(_files) >0:
       for k,v in _files.items():
         open(k,'wb').write(v)
getLocalFiles()

Потім ви можете використовувати звичайний оператор "import" для імпорту локальних файлів у Colab. Сподіваюся, це допоможе


Дякую, я нубі, і це єдина відповідь, яку я зрозумів, як реалізувати, і це працює для мене
NeStack

4

Ми можемо це зробити.

import sys
import os

py_file_location = "/content/drive/My Drive"
sys.path.append(os.path.abspath(py_file_location))

Тепер ви можете імпортувати його як модуль у блокноті для цього місця.

import whatever

3

Я стикаюся з тією ж проблемою. Після прочитання численних постів, я хотів би представити наступне рішення , яке я нарешті вибрав над багатьма іншими способами (наприклад , використання urllib, httpimport, клон з GitHub, пакет модулів для установки і т.д.). Рішення використовує API Google Drive ( офіційний документ ) для належної авторизації.

Переваги:

  1. Легко і безпечно (немає необхідності в коді для обробки винятків при роботі з файлами та / або додаткової авторизації)
  2. Файли модулів, захищені обліковими даними облікового запису Google (ніхто інший не може їх переглядати / приймати / редагувати)
  3. Ви контролюєте, що завантажувати / отримувати доступ (ви можете будь-коли змінити / скасувати доступ для кожного файлу окремо)
  4. Все в одному місці (не потрібно покладатися на іншу службу хостингу файлів або керувати нею)
  5. Свобода перейменовувати / переміщувати файли модулів (не на основі шляху та не порушує код вашого / іншого ноутбука)

Кроки:

  1. Збережіть файл модуля .py на Google Drive - ви повинні це мати, оскільки ви вже використовуєте Colab
  2. Клацніть правою кнопкою миші, "Отримати спільне посилання", скопіюйте частину після " id=" - ідентифікатор файлу, призначений Google Drive
  3. Додайте та запустіть наступні фрагменти коду у свій блокнот Colab:
!pip install pydrive                             # Package to use Google Drive API - not installed in Colab VM by default
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth                    # Other necessary packages
from oauth2client.client import GoogleCredentials
auth.authenticate_user()                         # Follow prompt in the authorization process
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)
your_module = drive.CreateFile({"id": "your_module_file_id"})   # "your_module_file_id" is the part after "id=" in the shareable link
your_module.GetContentFile("your_module_file_name.py")          # Save the .py module file to Colab VM
import your_module_file_name                                    # Ready to import. Don't include".py" part, of course :)

Примітка

І останнє, але не менш важливе, я повинен віддати належне початковому автору цього підходу. У цій публікації може бути якась друкарська помилка в коді, оскільки вона спровокувала помилку, коли я її спробував. Після подальшого читання та усунення несправностей мої фрагменти коду працювали вище (на сьогодні в ОС Colab VM: Linux 4.14.79).


1
Гммм, коли я намагаюся викликати функцію в імпортованому файлі py, цей код видає мені помилку
Leothorn

2

Спробуйте так:

У мене є пакет із назвою plant_seedlings. Пакет зберігається на google drive. Що я повинен зробити, це скопіювати цей пакет у /usr/local/lib/python3.6/dist-packages/.

!cp /content/drive/ai/plant_seedlings.tar.gz /usr/local/lib/python3.6/dist-packages/

!cd /usr/local/lib/python3.6/dist-packages/ && tar -xzf plant_seedlings.tar.gz

!cd /content

!python -m plant_seedlings

Не працює у мене. "/ content" не має підкаталогу "drive".
Олексій Тігарєв

Я не впевнений у цій відповіді, але для вашої проблеми спочатку натисніть Mount Driveкнопку Google Drive. Потім під папкою вмісту з’явиться папка диска.
Текін

1

Ви можете завантажити ці файли .py на диск Google і дозволити Colab використовувати для них:

!mkdir -p drive
!google-drive-ocamlfuse drive

Всі ваші файли та папки в кореневій папці будуть у drive.


спочатку вам потрібно встановити файлову систему FUSE для google drive, перш ніж ви зможете це зробити
FPcond

Насправді шахта працює лише з тими рядками вище. Ви пробували?
Huyen,

0

Це червень 2019 року. Переконайтесь, що у пакунку Python __init__.pyусі пов’язані файли імпортовані в порядку. Вставте код у Git або використовуйте цей код .

наприклад,

from .Boxes import *
from .Circles import *
from .Rectangles import *
...

Не використовуйте ім'я пакета у __init__.pyфайлі для імпорту файлів.

в Google colab,

! rm -rf SorghumHeadDetection
! git clone https://github.com/user/amazing-repo-name/

-1

Це простий спосіб

  1. введіть із файлу google.colab import files uploaded = files.upload ()
  2. скопіюйте код
  3. вставити в клітинку колабу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.