[更新]
GoogleドライブアカウントAにマウントしました。アカウントBに切り替えたいのですが、drive.mount()
を実行するときに新しい認証キーを入力する方法がないため、これを行うことはできません。
私が試して失敗したこと:
drive.mount()
でforce_remount=True
を使用すると、アカウントAのみが自動的に再マウントされます。新しいマウントターゲットを要求しません。次のことができるAPIはありますか?
ランタイムを再起動してアクセスを削除しても、効果はありませんでした。使用していたノートブックがマウントポイントに作成されたディレクトリであることを発見しました:
from google.colab import drive
drive.mount('/content/drive')
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
最初にマウントポイントのサブディレクトリを削除する必要がありました。まず、ドライブが実際にマウントされていないことを確認してください!
!find /content/drive
/content/drive
/content/drive/My Drive
/content/drive/My Drive/Colab Notebooks
/content/drive/My Drive/Colab Notebooks/assignment4
/content/drive/My Drive/Colab Notebooks/assignment4/output_dir
/content/drive/My Drive/Colab Notebooks/assignment4/output_dir/2020-04-05_16:17:15
上記のファイルとディレクトリは、ドライブをマウントする前にノートブックによって誤って作成されました。ドライブがマウントされていないことを確認したら(Are you sure?)、サブディレクトリを削除します。
!rm -rf /content/drive
この後、ドライブをマウントすることができました。
drive.mount()
関数の現在のコードは https://github.com/googlecolab/colabtools/blob/fe964e0e046c12394bae732eaaeda478bc5fa350/google/colab/drive.py にあります
これは、/ opt/google/drive/driveにあるドライブ実行可能ファイルのラッパーです。実行可能ファイルがフラグ_authorize_new_user
_を受け入れ、これを使用して再認証を強制できることがわかりました。
Drive.pyファイルの内容をコピーしてノートブックに貼り付けます。次に、現在189行目にあるd.sendline()
の呼び出しを次のように変更します(_authorize_new_user
_フラグが追加されていることに注意してください)。
_d.sendline(
('cat {fifo} | head -1 | ( {d}/drive '
'--features=max_parallel_Push_task_instances:10,'
'max_operation_batch_size:15,opendir_timeout_ms:{timeout_ms},'
'virtual_folders:true '
'--authorize_new_user=True '
'--inet_family=' + inet_family + ' ' + metadata_auth_arg +
'--preferences=trusted_root_certs_file_path:'
'{d}/roots.pem,mount_point_path:{mnt} --console_auth 2>&1 '
'| grep --line-buffered -E "{oauth_Prompt}|{problem_and_stopped}"; '
'echo "{drive_exited}"; ) &').format(
d=drive_dir,
timeout_ms=timeout_ms,
mnt=mountpoint,
fifo=fifo,
oauth_Prompt=oauth_Prompt,
problem_and_stopped=problem_and_stopped,
drive_exited=drive_exited))
_
drive
モジュールバージョンのflush_and_unmount()
または貼り付けたバージョンを呼び出してから、バージョンのmount()
を呼び出して、別のユーザーとしてログインします。