2015-02-03 38 views
11

एक प्रयोग के रूप में, मैं देखना चाहता हूं कि एक यूआरएल से पाइथन मॉड्यूल कैसे आयात करें। यहां काल्पनिक लक्ष्य केंद्रीय स्थान से आयात करना होगा जो मॉड्यूल को अद्यतित रखता है। यह कैसे किया जा सकता है?यूआरएल से पाइथन मॉड्यूल कैसे आयात किया जा सकता है?

मेरे प्रयास इस प्रकार है:

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

संपादित करें: Martijn Pieters उदाहरण कोड है कि दूरदराज के मॉड्यूल के स्ट्रिंग प्रतिनिधित्व में परिणाम के लिए एक ठीक की पहचान की। परिणामस्वरूप कोड निम्नानुसार है:

import urllib 
def import_URL(URL): 
    exec urllib.urlopen(URL).read() in globals() 
+3

आपको वास्तव में नहीं करना चाहिए। इंटरनेट पर कोड लोड न करें और इसे चलाएं, जब तक कि आप हैक नहीं करना चाहते। उस ने कहा, आपकी एकमात्र त्रुटि 'urlopen()' परिणाम पर '.read()' को कॉल नहीं कर रही है। –

+2

किसी URL से लोड करने के बजाय, कोड को अद्यतित रखने के लिए एक संशोधन नियंत्रण प्रणाली (गिट, मर्क्यूरियल इत्यादि) का उपयोग करें। –

+0

[मार्टिजन पीटर] (http://stackoverflow.com/users/100297/martijn-pieters) वहां आपकी टिप्पणियों के लिए धन्यवाद और '' 'पढ़ने()' '' समस्या को ढूंढने के लिए धन्यवाद। इसका परिणाम एक स्ट्रिंग में होता है जिसे निष्पादित किया जा सकता है। मुझे सुरक्षा समस्याओं से अवगत है; यह सिर्फ प्रयोगात्मक उद्देश्यों के लिए है। क्या आपको पता है कि इस विचार के लिए अधिक सुरक्षित दृष्टिकोण रखने का कोई प्रयास है? – d3pd

उत्तर

1

हाँ आप कर सकते हैं।

बस यूआरएल के साथ मॉड्यूल लाने और एक बार आप यह एक स्ट्रिंग जहां आप इसे चला सकते हैं eval()

का उपयोग कर urllib और eval का उपयोग करते हुए यह आसानी से किया जा सकता है के रूप में संग्रहीत:

import urllib.request 
a = urllib.request.urlopen(url) 
eval(a.read()) 

Do ध्यान दें कि कुछ मॉड्यूल (जैसे कि पायगम और पायडब) को रनटाइम की आवश्यकता होती है और वे लापता रनटाइम के कारण eval() का उपयोग करके नहीं चलाया जा सका।

आपकी परियोजना के साथ शुभकामनाएं, मुझे उम्मीद है कि मैंने मदद की है।

संबंधित मुद्दे