[Mettre à jour]
Je suis monté sur le compte Google Drive A. Maintenant, je veux passer au compte B, mais je ne peux pas le faire, car il n'y a aucun moyen pour moi d'entrer une nouvelle clé d'authentification lors de l'exécution de drive.mount()
.
Ce que j'ai essayé et échoué:
force_remount=True
dans drive.mount()
, il ne remontera automatiquement que le compte A. Ne me demande pas de nouvelle cible de montage.Existe-t-il une API qui peut:
Redémarrer les runtimes et supprimer l'accès n'a pas aidé. J'ai découvert que le bloc-notes que j'utilisais créait des répertoires sur le point de montage:
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).
J'ai dû d'abord supprimer les sous-répertoires du point de montage. Assurez-vous d'abord que votre lecteur n'est pas réellement monté!
!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
Les fichiers et répertoires ci-dessus ont été créés accidentellement par l'ordinateur portable avant que je ne monte le lecteur. Une fois que vous êtes sûr (êtes-vous sûr?) votre lecteur n'est pas monté, supprimez les sous-répertoires.
!rm -rf /content/drive
Après cela, j'ai pu monter le lecteur.
Le code actuel de la fonction drive.mount()
se trouve à l'adresse https://github.com/googlecolab/colabtools/blob/fe964e0e046c12394bae732eaaeda478bc5fa350/google/colab/drive.py
Il s'agit d'un wrapper pour l'exécutable du lecteur trouvé dans/opt/google/drive/drive. J'ai trouvé que l'exécutable accepte un indicateur authorize_new_user
Qui peut être utilisé pour forcer une nouvelle authentification.
Copiez et collez le contenu du fichier drive.py dans votre ordinateur portable. Modifiez ensuite l'appel à d.sendline()
actuellement sur la ligne 189 pour ressembler à ceci (notez l'ajout du drapeau 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))
Appelez la version du module drive
de flush_and_unmount()
ou celle que vous avez collée, puis appelez votre version de mount()
pour vous connecter en tant qu'utilisateur différent!