Come esperimento, voglio vedere come importare un modulo Python da un URL. L'obiettivo ipotetico qui sarebbe quello di importare da una posizione centrale che mantiene aggiornati i moduli. Come si può fare?Come può un modulo Python essere importato da un URL?
mio tentativo è il seguente:
>>> import urllib
>>>
>>> def import_URL(URL):
... exec urllib.urlopen(URL) in globals()
...
>>> import_URL("https://cdn.rawgit.com/wdbm/shijian/master/shijian.py")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in import_URL
TypeError: exec: arg 1 must be a string, file, or code object
EDIT: Martijn Pieters identificarono una correzione per il codice di esempio che determina la rappresentazione di stringa del modulo remoto. Il codice risultante è il seguente:
import urllib
def import_URL(URL):
exec urllib.urlopen(URL).read() in globals()
Davvero non dovresti. Non caricare codice su Internet ed eseguirlo, a meno che non si voglia essere hackerati. Detto questo, il tuo unico errore non è chiamare '.read()' sul risultato 'urlopen()'. –
Invece di caricare da un URL, utilizzare un sistema di controllo di revisione (git, mercurial, ecc.) Per mantenere il codice aggiornato. –
[Martijn Pieters] (http://stackoverflow.com/users/100297/martijn-pieters) Grazie per i vostri commenti lì e per individuare il problema '' 'read()' ''. Ciò si traduce in una stringa che può essere eseguita. Sono a conoscenza dei problemi di sicurezza; questo è solo per scopi sperimentali. Sai se c'è qualche sforzo per avere un approccio più sicuro a questa idea? – d3pd