जवाबों:
आपको PEP 8 , पायथन कोड के लिए स्टाइल गाइड की जाँच करनी चाहिए :
पैकेज और मॉड्यूल नाम मॉड्यूल में छोटे, सभी-लोअरकेस नाम होने चाहिए। यदि यह पठनीयता में सुधार करता है तो अंडरस्कोर मॉड्यूल के नाम में उपयोग किया जा सकता है। पायथन पैकेज में भी छोटे, सभी-लोअरकेस नाम होने चाहिए, हालांकि अंडरस्कोर का उपयोग हतोत्साहित किया जाता है।
चूँकि मॉड्यूल नामों को नाम दर्ज करने के लिए मैप किया जाता है, और कुछ फ़ाइल सिस्टम असंवेदनशील होते हैं और लंबे नामों को काटते हैं, इसलिए यह महत्वपूर्ण है कि मॉड्यूल नामों को काफी छोटा चुना जाए - यह यूनिक्स पर कोई समस्या नहीं होगी, लेकिन यह एक हो सकता है समस्या जब कोड को पुराने मैक या विंडोज संस्करणों या डॉस में ले जाया जाता है।
दूसरे शब्दों में: अपनी फ़ाइल का नाम बदलें :)
ops-scriptsऔर जान सकते हैं कि इन्हें सामान्य पैकेज नेमस्पेस दृष्टिकोण का उपयोग करके आयात नहीं किया जा सकता है। या एक ही स्क्रिप्ट को stop-website.pyएक समान प्रभाव के लिए नामित किया जा सकता है । इनमें से किसी को अभी भी runpyऔर कुछ अन्य तरीकों से आयात किया जा सकता है , लेकिन यह कुछ सामान्य त्रुटियों से बचने में मदद करता है।
cgi-binफ़ोल्डर में अजगर cgi फ़ाइलों का उपयोग कर रहा हूं (उन पर unitttests कर रहा है), जो बहुत मानक afaik है। जब तक आपके पास इस तरह का एक दुर्लभ मामला नहीं है, निश्चित रूप से अपने मॉड्यूल का नाम बदलें यदि आपके पास इस पर नियंत्रण है।
आपके कोड में एक और बात ध्यान देने वाली है कि आयात एक फ़ंक्शन नहीं है। तो ऐसा import(python-code)होना चाहिए import python-code, जैसा कि कुछ ने पहले ही उल्लेख किया है, "आयात अजगर ऋण कोड" के रूप में व्याख्या की गई है, न कि आप क्या करना चाहते हैं। यदि आपको वास्तव में इसके नाम से डैश के साथ फ़ाइल आयात करने की आवश्यकता है, तो आप निम्न कार्य कर सकते हैं ::
python_code = __import__('python-code')
लेकिन, जैसा कि ऊपर भी बताया गया है, यह वास्तव में अनुशंसित नहीं है। यदि आपको ऐसा कुछ नियंत्रित करना है तो आपको फ़ाइल नाम बदलना चाहिए।
TLDR
डैश अवैध नहीं हैं , लेकिन आपको उन्हें 3 कारणों से उपयोग नहीं करना चाहिए:
यदि आपको निश्चित रूप से डैश के साथ फ़ाइल नाम आयात करने की आवश्यकता है, तो विशेष सिंटैक्स यह है:
module_name = __import__('module-name')
इस बारे में उत्सुक कि हमें विशेष वाक्यविन्यास की आवश्यकता क्यों है?
विशेष वाक्य रचना का कारण यह है कि जब आप लिखते import somenameहैं somenameतो आप पहचानकर्ता के साथ एक मॉड्यूल ऑब्जेक्ट बना रहे हैं (ताकि आप बाद में इसका उपयोग कर सकते हैं जैसे somename.funcname)। बेशक module-nameएक मान्य पहचानकर्ता नहीं है और इसलिए विशेष वाक्यविन्यास जो एक वैध देता है।
आपको पता नहीं है कि मॉड्यूल-नाम मान्य पहचानकर्ता क्यों नहीं है?
चिंता न करें - मैंने भी नहीं किया। आपकी सहायता करने के लिए यहां एक टिप दी गई है: इस अजगर लाइन को देखें x=var1-var2:। क्या आपको असाइनमेंट के दाईं ओर एक घटाव या डैश के साथ एक चर नाम दिखाई देता है?
पुनश्च
मेरे उत्तर में मूल कुछ भी नहीं है, सिवाय इसके कि मैं एक स्थान पर अन्य सभी उत्तरों से सूचना के सबसे प्रासंगिक बिट्स को क्या मानता हूं
psycopg2_binary = import_module('psycopg2-binary')। त्रुटि => ModuleNotFoundError: No module named 'psycopg2-binary'। लेकिन psycopg2-binaryस्थापित है। इसे शामिल करने का कोई विचार नहीं है।
समस्या यह है कि python-codeपहचानकर्ता नहीं है। पार्सर इसे pythonमाइनस के रूप में देखता है code। बेशक यह वह नहीं होगा जो आप पूछ रहे हैं। आपको एक फ़ाइल नाम का उपयोग करने की आवश्यकता होगी जो एक मान्य अजगर पहचानकर्ता है। -एक अंडरस्कोर के साथ बदलने की कोशिश करें ।
आप शायद इसे कुछ __import__हैक के माध्यम से आयात कर सकते हैं , लेकिन यदि आप पहले से ही नहीं जानते हैं कि आपको कैसे नहीं करना चाहिए। पायथन मॉड्यूल नाम वैध चर नाम ("पहचानकर्ता") होना चाहिए - इसका मतलब है कि यदि आपके पास एक मॉड्यूल है foo_bar, तो आप इसे पायथन ( print foo_bar) के भीतर से उपयोग कर सकते हैं । आप एक अजीब नाम ( print foo-bar-> वाक्यविन्यास त्रुटि) के साथ ऐसा करने में सक्षम नहीं होंगे ।
पायथन 3 पर import_module का उपयोग करें :
from importlib import import_module
python_code = import_module('python-code')
आम तौर पर,
import_module('package.subpackage.module')
हालांकि उचित फ़ाइल नामकरण सबसे अच्छा कोर्स है, अगर python-codeहमारे नियंत्रण में नहीं है , तो एक हैकिंग का उपयोग __import__कॉपी करने, नाम बदलने या अन्यथा अन्य लेखकों के कोड के साथ गड़बड़ करने से बेहतर है। हालाँकि, मैंने कोशिश की और यह तब तक काम नहीं किया जब तक कि मैंने .pyएक्सटेंशन को जोड़ते हुए फ़ाइल का नाम नहीं बदला । को देखने के बाद दस्तावेज़ कैसे के लिए एक विवरण प्राप्त करने के लिए प्राप्त करने के लिए .py, मैं इस के साथ समाप्त हो गया:
import imp
try:
python_code_file = open("python-code")
python_code = imp.load_module('python_code', python_code_file, './python-code', ('.py', 'U', 1))
finally:
python_code_file.close()
इसने python-codecपहली बार एक नई फाइल बनाई ।