মূলত যখন আমার কাছে অজগর ফাইল থাকে:
python-code.py
আর ব্যবহার করুন:
import (python-code)
দোভাষী আমাকে সিনট্যাক্স ত্রুটি দেয়।
কিভাবে এটি স্থাপন করব তার উপর কোনো ধারণা আছে? পাইথন ফাইলের নামে ড্যাশগুলি কি অবৈধ?
মূলত যখন আমার কাছে অজগর ফাইল থাকে:
python-code.py
আর ব্যবহার করুন:
import (python-code)
দোভাষী আমাকে সিনট্যাক্স ত্রুটি দেয়।
কিভাবে এটি স্থাপন করব তার উপর কোনো ধারণা আছে? পাইথন ফাইলের নামে ড্যাশগুলি কি অবৈধ?
উত্তর:
পাইথন কোডের স্টাইল গাইড আপনার পিইপি 8 টি পরীক্ষা করা উচিত :
প্যাকেজ এবং মডিউল নাম মডিউলগুলির সংক্ষিপ্ত, সমস্ত-ছোট নাম থাকা উচিত। অধ্যয়নগুলি মডিউলটির নামে ব্যবহারযোগ্য যদি এটি পঠনযোগ্যতা উন্নত করে। পাইথন প্যাকেজগুলির ছোট, সমস্ত ছোট ছোট নাম থাকতে হবে যদিও আন্ডারস্কোর ব্যবহার নিরুত্সাহিত করা হয়েছে।
যেহেতু মডিউল নাম ফাইল করার জন্য ম্যাপ করা থাকে এবং কিছু ফাইল সিস্টেমগুলি সংবেদনশীল এবং দীর্ঘ নামগুলি কাটা হয়, তাই মডিউল নামগুলি মোটামুটি সংক্ষিপ্ত হিসাবে বেছে নেওয়া গুরুত্বপূর্ণ - এটি ইউনিক্সে সমস্যা হবে না তবে এটি একটি হতে পারে কোডটি পুরানো ম্যাক বা উইন্ডোজ সংস্করণ বা ডসগুলিতে স্থানান্তরিত হলে সমস্যা।
অন্য কথায়: আপনার ফাইলটির নামকরণ করুন :)
ops-scriptsএবং জেনে থাকুন যে এগুলি কোনও সাধারণ প্যাকেজ নেমস্পেস পদ্ধতির ব্যবহার করে আমদানি করা যায় না। বা একটি একক স্ক্রিপ্ট stop-website.pyএকই প্রভাব জন্য নামকরণ করা যেতে পারে । এর মধ্যে যে কোনও এখনও অবশ্যই runpyএবং কিছু অন্যান্য পদ্ধতির মাধ্যমে আমদানি করা যেতে পারে তবে এটি কিছু সাধারণ ত্রুটি এড়াতে সহায়তা করে।
cgi-binফোল্ডারে পাইথন সিজিআই ফাইলগুলি ব্যবহার করছি (সেগুলিতে আনইটসেটস করা হচ্ছে), এটি বেশ আদর্শ af যদি আপনার মতো বিরল কেস না ঘটে তবে আপনার মডিউলের নিয়ন্ত্রণ থাকলে অবশ্যই আপনার মডিউলটির নতুন নাম দিন।
আপনার কোডে অন্য একটি বিষয় লক্ষণীয় তা হ'ল আমদানি কোনও ফাংশন নয়। তাই 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 কোনও বৈধ শনাক্তকারী নয় এবং তাই বিশেষ সিনট্যাক্স যা বৈধ দেয় gives
মডিউল-নামটি বৈধ সনাক্তকারী নয় কেন আপনি পাবেন না?
চিন্তা করবেন না - আমিও করিনি। এখানে একটি ডগা আপনাকে সাহায্য করার জন্য আছে: এই পাইথন লাইন তাকান: 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প্রথম দৌড়ে একটি নতুন ফাইল তৈরি করেছে।