পাইথন == অজগর 2 বা পাইথন == অজগর 3? কীভাবে প্যাকেজ করবেন, পাইথন পাই 2 কে স্ক্রিপ্ট বিতরণ করবেন?


10

সিস্টেমের উপর নির্ভর করে, python== python2বা python== python3

এক্সিকিউটেবল পাইথন স্ক্রিপ্টস দিয়ে শুরু হয়:

#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...

পাইথন পাই 3 কে এটি ডকুমেন্টেশনে সরবরাহ করা হয়েছে আমার এটি ভার্সন নম্বর সহ / ব্যবহার করতে হবে , তাই আমি এটি করি:

#!/usr/bin/env python3

তবে আমি পাই 2 কে স্ক্রিপ্টগুলির সাথে একটি সমস্যা পেয়েছি।

যদিও py2k ডকুমেন্টেশন এটা ব্যবহার করা লেখা আছে, #! /usr/bin/env python,

কিছু * নিক্স-এএস পাইথন পাইথেকে ডিফল্ট হয় তাই পাইথন == পাইথন 3। (উদাহরণস্বরূপ আর্কলিনাক্স পাইথন প্যাকেজ , এখানে পাইথন প্যাকেজ ফাইল রয়েছে )।

কীভাবে প্যাকেজ করবেন (কনফিগার করুন, তৈরি করুন) এবং / অথবা হ্যান্ডেল করার জন্য পাইথন স্ক্রিপ্টগুলি বিতরণের জন্য প্রস্তুত করবেন?

আমি এমন সফ্টওয়্যার প্যাকেজগুলি তৈরির বিষয়ে জিজ্ঞাসা করি যা ব্যবহারকারীরা সহজেই চালাতে পারে (তাদের পরিবেশকে ছড়িয়ে না দিয়ে)

আমি পাইথন py3k স্ক্রিপ্টের জন্য যেমন পাইথন py2k স্ক্রিপ্ট জন্য একই কৌতুক করতে এবং এটি হিসাবে সেট করতে পারে না: #!/usr/bin/env python2? আমি কী নিশ্চিত যে প্রতিটি পাইথন পাই 2 কে ডিস্ট্রিবিউশনে python2ফাইল রয়েছে তাই #!/usr/bin/env python2কাজ করবে?

যদি হ্যাঁ, কেন এটি স্ট্যান্ডার্ড হিসাবে প্রস্তাবিত নয়, উদাহরণস্বরূপ পাইথন পাই 2 কে ডকুমেন্টেশনে ?


4
যতদূর আমি জানি আপনি সর্বদা python2এটি চালানোর জন্য ব্যবহার করতে পারেন (এটি ইনস্টল করা থাকলে) এবং পাশাপাশি আপনি সংস্করণটি পরীক্ষা করতে পারেন python -V। যদি আপনি pythonএটি 2 বা 3 হতে চান , আপনার উচিত rm /usr/bin/pythonএবং তারপরে আপনার পছন্দসই পাইথন সংস্করণ থেকে উদাহরণস্বরূপ সিমলিংক তৈরি করা উচিত ln -s /usr/bin/python2.5 /usr/bin/python
হানান এন।

আমাকে সম্পর্কে নিশ্চিত করার জন্য ধন্যবাদ python2। আমি ভাবছি কেন পাই 2 কে এবং পাই 3 কে থাকে এবং ডিফল্ট pythonপৃথক হতে পারে তবে কেন এটি ব্যবহার করা মানসম্মত নয় ? অপসারণ সম্পর্কে আপনার পরামর্শ সম্পর্কে কী - এটি এই উদাহরণের পক্ষে ঠিক নয়, কারণ আমি প্যাকেজিং সম্পর্কে জিজ্ঞাসা করি। আমি এমন প্যাকেজ তৈরি করতে চাই যা বিভিন্ন কনফিগারেশন / সিস্টেমে চলতে পারে। পরিবেশ পরিবর্তন করার কোনও উপায় নেই। যাচাইয়ের বিষয়ে - এটি শেবাং -এর ক্ষেত্রে প্রযোজ্য নয় - যতদূর আমি জানি।
গ্রজেগোর্জ ওয়েয়ারজোইইকি

আমি বিশ্বাস করি যে @ হানান এন আপনাকে যা বলতে চাইছে তা হ'ল যদি আপনি পাইথন ২.x কোড লিখছেন তবে #!...python2আপনার প্রোগ্রামগুলিতে ব্যবহার করুন এবং আপনি যদি পাইথন ৩.x ব্যবহার করছেন তবে ব্যবহার করুন #!...python3। সঠিক লিঙ্কটি রাখতে অপারেটিং সিস্টেমের উপর নির্ভর করবেন না যদি আপনি জানেন তবে এটি কেবল একটি নির্দিষ্ট রিলিজে কাজ করবে। আমি এমন সিস্টেমে কাজ করি যেখানে এখনও পাইথন 1.5.2 ইনস্টল করা আছে /usr/bin/python- আমি হয় পুরানো পাইথন রিলিজগুলি পরিচালনা করতে বা ব্যবহার করতে কোড লিখি python2
আর্জেজ

2
@ আর্জেজ python2আমার সিস্টেমে কোনও এক্সিকিউটেবল নেই (ডিবিয়ান স্কিচ )। pythonএটিতে একটি সিমিলিংক python2.6, এবং python3এটির জন্য একটি সিমিলিংক python3.1, তবে কোনও নেই python2
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

উত্তর:


3

একটি স্ক্রিপ্ট তার পাইথন সংস্করণটি পরীক্ষা করতে পারে এবং যদি পাইথন 3 হয় তবে পাইথন 2 ব্যবহার করে নিজেকে আবার শুরু করতে হবে the স্ক্রিপ্টের মাথার নিকটে নিম্নলিখিতটি যুক্ত করুন:

if sys.version > '3':
  python2 = os.popen('which python2 2> /dev/null').read().rstrip()
  if python2:
    args = sys.argv[:]
    args.insert(0,python2)
    os.execv(python2,args)
  else:
    sys.exit("%s requires Python Version 2 (python2 not in PATH)" % os.path.basename(__file__))

এটি পরিবেশের ক্ষেত্রে whichসনাক্ত করতে সিস্টেমের কমান্ড ব্যবহার করে । এরপরে এটি সেটির সাথে নিজেকে পুনরায় চালু করে (বা এটি সন্ধান করতে না পারলে তা বাতিল করে দেয়)।python2PATH

নোট করুন যে স্ক্রিপ্টটি পাইথন 3 এ শুরু করার জন্য বৈধ পাইথন 3 সিনট্যাক্স হওয়া দরকার।

এছাড়াও, কোনও আউটপুট execvকল করার আগে ফ্লাশ করা উচিত বা এটি হারিয়ে যাবে। উদাহরণস্বরূপ যুক্ত করা, sys.stdout.flush()কল করার ঠিক আগে execvকোনও printবিবৃতি ফ্ল্যাশ করবে ।


1

পুরানো সংস্করণগুলিতে, কেবল pythonপরিবর্তে থাকতে পারে python2। আপনার শিবাং লাইনকে আরও পরিষ্কার করতে আপনি একটি লিঙ্ক তৈরি python2 -> pythonকরতে পারেন যাতে আপনি ব্যবহার করতে পারেন #!/usr/bin/env python2


তবে, এটি উল্লিখিত সমস্যাটির সমাধান করে না। কারণ প্রশ্ন হল কিভাবে আপনার স্ক্রিপ্টটি পোর্টেবল যথেষ্ট, ( "পাইথন" "python2" ইত্যাদি সহ) করতে তাই এটি উল্লেখ পরিবেশের সব চালাতে পারেন হয়
Grzegorz Wierzowiecki

1

আমি মনে করি https://www.python.org/dev/peps/pep-0394/ এ "স্ট্যান্ডার্ড" সংজ্ঞায়িত করা হয়েছে

পাইথন ইন্টারপ্রেটারের ডিফল্ট সংস্করণ (অর্থাত পাইথন কমান্ড দ্বারা আহৃত সংস্করণ) নির্বিশেষে পাইথন স্ক্রিপ্টগুলি * নিক্স সিস্টেমে বহনযোগ্য হতে পারে তা নিশ্চিত করার জন্য এই পিইপি একটি কনভেনশন সরবরাহ করে।

  • পাইথন 2 পাইথন ২.x এর কিছু সংস্করণ উল্লেখ করবে।
  • পাইথন 3 পাইথন 3.x এর কিছু সংস্করণ উল্লেখ করবে।
  • আপাতত, সমস্ত বিতরণে নিশ্চিত হওয়া উচিত যে পাইথন পাইথন 2 এর মতো একই লক্ষ্যকে বোঝায়।
  • যাইহোক, শেষ ব্যবহারকারীদের সচেতন হওয়া উচিত যে পাইথন কমপক্ষে আর্চ লিনাক্সে পাইথন 3 বোঝায় (যে পরিবর্তনটি এই পিইপি তৈরির অনুরোধ জানায়), তাই পাইথনটি কেবল শেবাং লাইনে স্ক্রিপ্টগুলির জন্য ব্যবহার করা উচিত যা পাইথন 2 উভয়ের সাথেই সুসংগত। এবং 3।
  • পাইথনের ডিফল্ট সংস্করণে পরিণামের পরিবর্তনের জন্য, পাইথন 2 কেবলমাত্র স্ক্রিপ্টগুলিকে পাইথন 3 এর সাথে সুসংগত হিসাবে উত্সাহিত করতে হবে অথবা অন্যথায় শেবাং লাইনে পাইথন 2 ব্যবহার করতে হবে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.