Importieren von .py-Dateien in Google Colab

77

Gibt es eine Möglichkeit, meinen Code in .py-Dateien hochzuladen und in Colab-Codezellen zu importieren?

Die andere Möglichkeit, die ich gefunden habe, besteht darin, ein lokales Jupyter-Notizbuch zu erstellen und es dann in Colab hochzuladen. Ist dies die einzige Möglichkeit?

Reham M Samir
quelle

Antworten:

88

Sie können es zuerst speichern und dann importieren.

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

Update (November 2018): Jetzt können Sie ganz einfach von hochladen

  • Klicken Sie auf [>], um den linken Bereich zu öffnen
  • Wählen Sie die Registerkarte Datei
  • Klicken Sie auf [Upload] und wählen Sie Ihre [mylib.py]
  • Mylib importieren

Update (Oktober 2019): Wenn Sie nicht jedes Mal hochladen möchten, können Sie es in S3 speichern und wie in dieser Übersicht gezeigt in Colab mounten

Update (April 2020): Jetzt können Sie Ihr Google Drive automatisch mounten. Es ist einfacher, es einfach von Drive zu kopieren, als es hochzuladen.

  • Shop mylib.pyin your Drive
  • Öffne ein neues Colab
  • Öffnen Sie den (linken) Seitenbereich und wählen Sie FilesAnsicht
  • Klicken Sie Mount DrivedannConnect to Google Drive
  • Kopieren Sie es mit !cp "drive/My Drive/mylib.py" .
  • import mylib
Korakot
quelle
@rsam Dann versuchen Sie die zweite Methode. Ich habe es versucht und es hat bei mir funktioniert.
Korakot
files.upload () funktioniert derzeit nicht in Firefox. Eine alternative Möglichkeit besteht darin, es in Google Drive hochzuladen und es dann von einem Notebook mit PyDrive herunterzuladen.
Alexey Tigarev
2
Wenn Sie die Registerkarte "Datei" verwenden, müssen Sie den Upload zu jeder Laufzeit wiederholen
information_interchange
1
Ich füge jetzt die Methode zum Speichern in S3 hinzu, sodass Sie sie nicht erneut hochladen müssen.
Korakot
4
@eswaraamirthans Du vergisst den Punkt "." Am Ende.
Korakot
51

Falls jemand anderes interessiert ist, wie man Dateien / Pakete von gdrive in ein Google Colab importiert. Das folgende Verfahren hat bei mir funktioniert:

1) Hängen Sie Ihr Google Drive in Google Colab ein:

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

2) Hängen Sie das Verzeichnis mit sys an Ihren Python-Pfad an:

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

Jetzt sollten Sie in der Lage sein, Sachen aus diesem Verzeichnis zu importieren!

a3VonG
quelle
11
  1. Sie können lokale Dateien mit der Funktion upload () in google.colab.files in Google Colab hochladen
  2. Wenn Sie Dateien auf github haben, klonen Sie das Repo mit! Git-Klon https://github.com/username/repo_name.git . Laden Sie es dann wie im Jupiter-Notebook mit der Zauberfunktion % load %load filename.py .
Aditya Mishra
quelle
1
Die zweite Methode hat bei mir funktioniert, ich musste nur den Namen des %load repo_name/filename.py
Repos
1
@xyzjayne hast du versucht, es zu importieren? Ich kann es gut laden, aber nicht als Modul verwenden
information_interchange
9

Basierend auf der Antwort von Korakot Chaovavanich habe ich die folgende Funktion erstellt, um alle Dateien herunterzuladen, die in einer Colab-Instanz benötigt werden.

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()

Sie können dann die übliche 'import'-Anweisung verwenden, um Ihre lokalen Dateien in Colab zu importieren. ich hoffe das hilft

Flint Joe
quelle
Danke, ich bin ein Noobie und dies ist die einzige Antwort, die ich verstehen konnte und die für mich funktioniert
NeStack
3

Ich stehe vor dem gleichen Problem. Ich schließlich entscheiden über viele andere Methoden Nach zahlreichen Beiträgen zu lesen, würde Ich mag die folgende Lösung einzuführen (zB Verwendung urllib, httpimportKlon von GitHub, verpacken die Module für die Installation, etc). Die Lösung verwendet die Google Drive API ( offizielles Dokument ) für die ordnungsgemäße Autorisierung.

Vorteile:

  1. Einfach und sicher (kein Code erforderlich, um Ausnahmen von Dateivorgängen und / oder zusätzliche Autorisierung zu behandeln)
  2. Moduldateien, die durch Anmeldeinformationen des Google-Kontos geschützt sind (niemand anderes kann sie anzeigen / übernehmen / bearbeiten)
  3. Sie steuern, was hochgeladen / zugegriffen werden soll (Sie können den Zugriff jederzeit Datei für Datei ändern / widerrufen).
  4. Alles an einem Ort (Sie müssen sich nicht auf einen anderen Datei-Hosting-Service verlassen oder diesen verwalten).
  5. Die Freiheit, Moduldateien umzubenennen / zu verschieben (nicht pfadbasiert und wird den Notebook-Code Ihres / anderen nicht beschädigen)

Schritte:

  1. Speichern Sie Ihre .py-Moduldatei in Google Drive - das sollten Sie haben, da Sie Colab bereits verwenden
  2. Klicken Sie mit der rechten Maustaste darauf, "Get Shareable Link", und kopieren Sie das Teil nach " id=" - der von Google Drive zugewiesenen Datei-ID
  3. Fügen Sie Ihrem Colab-Notizbuch die folgenden Codefragmente hinzu und führen Sie sie aus:
!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 :)

Randnotiz

Zu guter Letzt sollte ich den ursprünglichen Mitwirkenden dieses Ansatzes anerkennen. Dieser Beitrag enthält möglicherweise einen Tippfehler im Code, da er beim Ausprobieren einen Fehler auslöste. Nach mehr Lesen und Fehlerbehebung funktionierten meine obigen Codefragmente (ab heute unter Colab VM OS: Linux 4.14.79).

Frank Wang
quelle
1
Umm, wenn ich versuche, eine Funktion in der importierten py-Datei
aufzurufen,
2

Versuchen Sie Folgendes:

Ich habe ein Paket namens plant_seedlings. Das Paket wird in Google Drive gespeichert. Was ich tun sollte, ist dieses Paket in /usr/local/lib/python3.6/dist-packages/ zu kopieren.

!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
Feng
quelle
Funktioniert bei mir nicht "/ content" hat kein Unterverzeichnis "drive".
Alexey Tigarev
Ich bin mir dieser Antwort nicht sicher, aber für Ihr Problem sollten Sie zuerst auf die Mount DriveSchaltfläche von Google Drive klicken . Dann wird der Laufwerksordner unter dem Inhaltsordner angezeigt.
Tekin
2

Wir können das tun.

import sys
import os

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

Jetzt können Sie es als Modul in ein Notizbuch für diesen Speicherort importieren.

import whatever
Nerd
quelle
1

Sie können diese .py-Dateien auf Google Drive hochladen und Colab erlauben, sie zu verwenden:

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

Alle Ihre Dateien und Ordner im Stammordner befinden sich in drive.

Huyen
quelle
Sie müssen zuerst das FUSE-Dateisystem für Google Drive installieren, bevor Sie dies tun können
FPcond
Eigentlich funktioniert meins nur mit den obigen Zeilen. Hast du es versucht?
Huyen
0

Es ist Juni 2019. Stellen Sie sicher, dass im Python-Paket __init__.pyalle zugehörigen Dateien der Reihe nach importiert werden. Schieben Sie den Code auf Git oder verwenden Sie diesen Code .

zum Beispiel

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

Verwenden Sie den Paketnamen in der __init__.pyDatei nicht zum Importieren der Dateien.

in Google colab,

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

Ein einfacher Weg ist

  1. Geben Sie aus google.colab ein. Importieren Sie Dateien hochgeladen = files.upload ()
  2. Kopieren Sie den Code
  3. Paste in Colab-Zelle
Sanidhya Tyagi
quelle