जवाबों:
आपको 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
पहली बार एक नई फाइल बनाई ।