Nhập tệp .py trong Google Colab


82

Có cách nào để tải lên mã của tôi trong các tệp .py và nhập chúng vào các ô mã colab không?

Một cách khác mà tôi tìm thấy là tạo một sổ ghi chép Jupyter cục bộ sau đó tải nó lên Colab, đó có phải là cách duy nhất?

Câu trả lời:


97

Bạn có thể lưu nó trước, sau đó nhập nó.

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

Cập nhật (nov 2018): Bây giờ bạn có thể tải lên dễ dàng bằng cách

  • nhấp vào [>] để mở ngăn bên trái
  • chọn tab tệp
  • nhấp vào [tải lên] và chọn [mylib.py] của bạn
  • nhập mylib

Cập nhật (tháng 8 năm 2019): Nếu bạn không muốn tải lên mọi lúc, bạn có thể lưu trữ nó trong S3 và gắn nó vào Colab, như được hiển thị trong ý chính này

Cập nhật (Apr 2020): Giờ đây, bạn có thể tự động gắn kết Google Drive của mình. Sẽ dễ dàng hơn nếu chỉ sao chép nó từ Drive hơn là tải nó lên.

  • Lưu trữ mylib.pytrong Drive của bạn
  • Mở một Colab mới
  • Mở ngăn (bên trái), chọn Fileschế độ xem
  • Nhấp vào Mount Drivesau đóConnect to Google Drive
  • Sao chép nó bởi !cp drive/MyDrive/mylib.py .
  • import mylib

@rsam Sau đó, hãy thử phương pháp thứ hai. Tôi đã thử nó và nó làm việc cho tôi.
korakot 23/02/18

files.upload () hiện không hoạt động trong Firefox. Cách khác là tải nó lên Google Drive, sau đó từ một sổ ghi chép sử dụng PyDrive để tải xuống.
Alexey Tigarev

2
Nếu bạn sử dụng phương pháp tab tập tin mà bạn phải lặp lại việc tải lên mỗi runtime
information_interchange

1
Bây giờ tôi thêm phương thức để lưu trữ nó trong S3, vì vậy bạn không cần tải lên lại.
korakot

5
@eswaraamirthans Bạn quên dấu chấm "." cuối cùng.
korakot

56

Trong trường hợp bất kỳ ai khác muốn biết cách nhập tệp / gói từ gdrive vào bên trong cột google. Quy trình sau đây phù hợp với tôi:

1) Gắn google drive của bạn vào google colab:

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

2) Nối thư mục vào đường dẫn python của bạn bằng sys:

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

Bây giờ bạn sẽ có thể nhập nội dung từ thư mục đó!


11
  1. Bạn có thể tải các tệp cục bộ lên google colab bằng cách sử dụng hàm upload () trong google.colab.files
  2. Nếu bạn có tệp trên github, hãy sao chép repo bằng cách sử dụng! Git clone https://github.com/username/repo_name.git . Sau đó, giống như trong sổ ghi chép jupyter, hãy tải nó bằng cách sử dụng hàm ma thuật % load %load filename.py .

1
Phương pháp thứ hai hiệu quả với tôi, tôi chỉ cần thêm tên của repo:%load repo_name/filename.py
xyzjayne

1
@xyzjayne bạn đã thử nhập nó chưa? Tôi có thể tải nó tốt, nhưng không thể sử dụng nó như một mô-đun
information_interchange

9

Dựa trên câu trả lời của Korakot Chaovavanich, tôi đã tạo hàm bên dưới để tải xuống tất cả các tệp cần thiết trong một phiên bản 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()

Sau đó, bạn có thể sử dụng câu lệnh 'import' thông thường để nhập các tệp cục bộ của mình vào Colab. Tôi hi vọng cái này giúp được


Cảm ơn, tôi là một noobie và đây là chỉ trả lời tôi hiểu làm thế nào để thực hiện và nó làm việc cho tôi
NeStack

4

Chúng tôi có thể làm như vậy.

import sys
import os

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

Bây giờ bạn có thể nhập nó dưới dạng mô-đun trong sổ ghi chép cho vị trí đó.

import whatever

3

Tôi phải đối mặt với cùng một vấn đề. Sau khi đọc rất nhiều bài viết, tôi xin giới thiệu các giải pháp sau đây cuối cùng tôi đã chọn qua nhiều phương pháp khác (ví dụ sử dụng urllib, httpimport, clone từ GitHub, đóng gói module để cài đặt, vv). Giải pháp sử dụng API Google Drive ( tài liệu chính thức ) để cấp quyền thích hợp.

Ưu điểm:

  1. Dễ dàng và an toàn (không cần mã để xử lý các trường hợp ngoại lệ hoạt động tệp và / hoặc ủy quyền bổ sung)
  2. Các tệp mô-đun được bảo vệ bằng thông tin đăng nhập tài khoản Google (không ai khác có thể xem / lấy / chỉnh sửa chúng)
  3. Bạn kiểm soát nội dung tải lên / truy cập (bạn có thể thay đổi / thu hồi quyền truy cập bất cứ lúc nào trên cơ sở từng tệp)
  4. Mọi thứ ở một nơi (không cần phụ thuộc hoặc quản lý dịch vụ lưu trữ tệp khác)
  5. Tự do đổi tên / định vị lại các tệp mô-đun (không dựa trên đường dẫn và sẽ không phá vỡ mã sổ ghi chép của bạn / người khác)

Các bước:

  1. Lưu tệp mô-đun .py của bạn vào Google Drive - bạn nên có tệp đó vì bạn đã sử dụng Colab
  2. Nhấp chuột phải vào nó, "Lấy liên kết có thể chia sẻ", sao chép phần sau " id=" - id tệp được Google Drive chỉ định
  3. Thêm và chạy các đoạn mã sau vào sổ ghi chép Colab của bạn:
!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 :)

Ghi chú bên lề

Cuối cùng nhưng không kém phần quan trọng, tôi nên ghi công người đóng góp ban đầu của phương pháp này. Bài đăng đó có thể có một số lỗi đánh máy trong mã vì nó gây ra lỗi khi tôi thử nó. Sau khi đọc thêm và khắc phục sự cố, đoạn mã của tôi ở trên đã hoạt động (tính đến hôm nay trên Colab VM OS: Linux 4.14.79).


1
Rất tiếc khi tôi cố gắng gọi một hàm trong tệp py đã nhập, mã này gây ra lỗi cho tôi
Leothorn

2

Hãy thử cách này:

Tôi có một gói tên là plant_seedlings. Gói được lưu trữ trong google drive. Những gì tôi nên làm là sao chép gói này trong /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

Không hiệu quả với tôi. "/ content" không có thư mục con "drive".
Alexey Tigarev

Tôi không chắc chắn về câu trả lời này nhưng đối với vấn đề của bạn, trước tiên bạn nên nhấp vào Mount Drivenút của google drive. Sau đó, thư mục ổ đĩa sẽ xuất hiện dưới thư mục nội dung.
Tekin

1

Bạn có thể tải các tệp .py đó lên Google drive và cho phép Colab sử dụng chúng:

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

Tất cả các tệp và thư mục của bạn trong thư mục gốc sẽ ở trong drive.


đầu tiên bạn phải cài đặt hệ thống tập tin FUSE cho ổ google trước khi bạn có thể làm điều đó
FPcond

Trên thực tế của tôi chỉ hoạt động với những dòng trên. Bạn đã thử chưa?
Huyền

0

Đó là tháng 6 năm 2019. Đảm bảo rằng trong gói Python, __init__.pytất cả các tệp liên quan được nhập theo thứ tự. Đẩy mã vào Git hoặc sử dụng mã này .

ví dụ,

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

Không sử dụng Tên gói trong __init__.pytệp để nhập tệp.

trong chuyên mục Google,

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

-1

Một cách dễ dàng là

  1. nhập từ google.colab nhập các tệp được tải lên = files.upload ()
  2. sao chép mã
  3. dán vào ô colab
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.