একটি বহিরাগত পাইথন গ্রন্থাগারের উপর নির্ভর করে এমন একটি প্লাগইন বিকাশ


29

আমি একটি পাইথন প্লাগইন বিকাশ করছি, লক্ষ্যটি পাইজিআই পাইথন লাইব্রেরির ক্রিয়াকলাপগুলিকে কিউজিআইএসে একীভূত করছে যার নাম 'এলিভেশন'।

বাহ্যিক পাইথন লাইব্রেরি ইনস্টল করার এবং পাইথন প্লাগইনগুলিতে সেগুলি উপলব্ধ করার কোনও ওএসের স্বাধীন উপায় আছে কি?

বাহ্যিক পাইথন নির্ভরতা ইনস্টল করার জন্য আমি ইতিমধ্যে বিভিন্ন সিস্টেমের নির্দিষ্ট পদ্ধতিগুলি জানি, আমি যা করতে চাই তা হ'ল মানুষকে পাগল না করে আমার প্লাগইনকে বিভিন্ন পরিবেশে বিতরণ করা।

আমি ইতিমধ্যে যা জানি

ওয়েব এবং অন্যান্য অনুরূপ প্রশ্নগুলি অনুসন্ধান করা দেখে মনে হচ্ছে কোনও ওএস স্বাধীন সমাধান নেই।

উইন্ডোজ ব্যবহারকারীরা

পাইথনটি প্যাকেজ করা হয় এবং কিউজিআইএস প্যাকেজের ভিতরে বিতরণ করা হয়, সুতরাং বাহ্যিক পাইথন লাইব্রেরি ইনস্টল করতে আপনাকে ওএসজিও 4 ডাব্লু শেলটি দিয়ে যেতে হবে এবং সেখান থেকে পাইপ ব্যবহার করতে হবে।

সম্পর্কিত লিংক:

ওএস এক্স ব্যবহারকারীগণ

এক্ষেত্রে কিউজিআইএস বিল্ট-ইন পাইথন ব্যবহার করে যা ওএস এক্সের অভ্যন্তরে প্রিপেইকড এবং এখানে অবস্থিত:

/usr/bin/python

এখানে সমস্যাটি হ'ল ডিফল্ট ইনস্টলড পাইপের কিছু সীমাবদ্ধতা রয়েছে এবং এর জন্য অনেকগুলি সুবিধার দরকার।

পাইথন ইনস্টল করার জন্য একটি দ্রুত কাজ করা হ'ল যাতে আপনার পিপটি ব্যবহারকারী-পরিবর্তনযোগ্য পাইথন কাঠামোর বিরুদ্ধে চলে। এই পদ্ধতির বিশদটি এখানে দেখুন

পাইপের মাধ্যমে সমস্ত পাইথন লাইব্রেরি ইনস্টল করার পরে, আপনাকে কেবল তাদের PATH ভেরিয়েবলের ডিরেক্টরি যুক্ত করতে হবে।

ওএস এক্স ব্যবহারকারীদের জন্য বিকল্প উপায়

পাইথন কোড প্লাগইনের ভিতরে আপনি প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করতে সিস্টেমের সরবরাহিত পাইপটি ব্যবহার করতে পারেন। তারপরে আপনি স্রেফ ইনস্টল করা প্যাকেজটিকে এটিকে পাথে যুক্ত করতে সক্ষম করে তুলতে পারেন।

import sys
import pip
pip.main(['install','--target=/Devel/test', 'elevation'])
sys.path.append("/Devel/test")

হোমমেড কিন্তু ওয়ার্কিং সলিউশন (লিনাক্স এবং ওএস এক্স উভয়ের জন্য পরীক্ষিত)

প্লাগইন আপডেট এবং রক্ষণাবেক্ষণটি প্লাগইন থেকে পৃথক রাখতে দেয় বলে আমি বিকল্প পথে যাওয়ার সিদ্ধান্ত নিয়েছি। প্রতিবার কোনও নতুন ব্যবহারকারী প্লাগইন ইনস্টল করলে উচ্চতার লাইব্রেরির সর্বশেষতম সংস্করণটি সরাসরি প্লাগইনের একটি উপ-ডিরেক্টরিতে পাইপ দ্বারা ডাউনলোড এবং ইনস্টল করা হয়।

self.plugin_dir = os.path.dirname(__file__)
self.elevation_dir = os.path.join(self.plugin_dir, 'elevation')

# Checking the presence of elevation library
try:
    import elevation
except:
    pip.main(['install', '--target=%s' % self.elevation_dir, 'elevation'])
    if self.elevation_dir not in sys.path:
        sys.path.append(self.elevation_dir)

এই পদ্ধতিটি কেবল উইন্ডোজের জন্য কারণ ইউনিক্স ওএস (লিনাক্স, ম্যাক ওএস এক্স) স্ট্যান্ডার্ড পাইথন সংস্করণ ইনস্টলড ব্যবহার করে
জিন

আমি এটি জানি, আমি আমার প্রশ্নটি 'সমৃদ্ধ' করছিলাম, এখন একটি ওএস এক্স ব্যবহারকারী বিভাগ রয়েছে যা এটি ম্যাকের মাধ্যমে কীভাবে করা যায় তা ব্যাখ্যা করে।
ইঞ্জিনিয়ার-জি

1
আপনি অ্যাপল পাইথনে পাইপ ইনস্টল করতে পারেন। কিউজিআইএস এই সংস্করণটি ব্যবহার করে অন্যদের সংস্করণ নয় (হোমব্রিউ, অ্যানাকোন্ডা এবং অন্যান্য)। আপনি যদি হোমব্রু পাইথনটি ব্যবহার করতে চান তবে আপনাকে কিউজিআইএস
জিন

এছাড়াও তাকান প্লাগইন অধীনস্থ , একজন pipinstall প্লাগইন সম্ভব? প্রথম: ওসজিও 4 ডেল শেলের মধ্যে পার্থক্য কী? এবং কিউজিসআইএস তালিকায় থাকা আরও অনেক পোস্ট
জিন gene

3
যদি এটি খাঁটি পাইথন লাইব্রেরি হয় তবে আপনি কেবল আপনার প্লাগইনটি উপ-প্যাকেজ / মডিউল হিসাবে তৃতীয় পক্ষের লাইব্রেরি বিতরণ করতে পারেন।
ব্যবহারকারী2856

উত্তর:


2

আমি এই ইস্যুটির মাধ্যমে কিউজিআইএসে পাইথন স্ক্রিপ্টগুলি চালনার জন্য ভুগছিলাম যা একটি বাহ্যিক পাইথন লাইব্রেরির উপর নির্ভর করে। সর্বাধিক সরল সমাধান হ'ল কমান্ড লাইনের সাথে আসে এবং নিজস্ব পাইথন ইনস্টল করে বাউন্ডলেস ডেস্কটপ ইনস্টল করা। কমান্ড লাইনটি ব্যবহার করে আপনি পাইথনের যেকোন বাহ্যিক প্যাকেজটি চালাতে ও ইনস্টল করতে (পাইপ ব্যবহার করে) করতে পারেন।


1

আমি সম্প্রতি একটি প্রকল্পে এটিতে কিছুটা কাজ করেছি। দুর্ভাগ্যক্রমে এটি অর্জনের জন্য দুর্দান্ত উপায় নেই। আপনার সমাধানটি আমি যা এসেছি তার সাথে খুব মিল, তবে ব্যবহারকারী এমনকি পাইপ ইনস্টল করার কোনও গ্যারান্টি নেই।

আমি get_pip.py এর একটি অনুলিপি এবং এটি উপলব্ধ না হলে ক্ষেত্রে এটি চালানোর জন্য execfile () ব্যবহার করে শেষ করেছি।

আপনার চূড়ান্ত সমাধান মত:

self.plugin_dir = os.path.dirname(__file__)

try:
    import pip
except:
    execfile(os.path.join(self.plugin_dir, get_pip.py))
    import pip
    # just in case the included version is old
    pip.main(['install','--upgrade','pip'])

try:
    import somelibrary
except:
    pip.main(['install', 'somelibrary'])

অবশ্যই একটি বিকল্প হ'ল গ্রন্থাগারটি আপনার প্লাগইন ডিরেক্টরিতে অন্তর্ভুক্ত করা উচিত। আপনি একটি পুরানো সংস্করণ সরবরাহ করার ঝুঁকি নিয়েছেন, তবে তাত্ত্বিকভাবে এটি কোনও বিষয় নয়।


1

বাহ্যিক নির্ভরতা ইনস্টল করার জন্য সম্ভবত আপনি ভার্চুয়ালেনভ চেষ্টা করতে পারেন। এইভাবে, আপনাকে সিস্টেমের পরিবেশ সম্পর্কে উদ্বিগ্ন হতে হবে না (যতটা)।

https://www.fullstackpython.com/application-dependencies.html


1

এটি আমার পক্ষে কাজ করেছে (ডিএফ রান (স্ব)):

    def load_libraries(self):
        import_path = os.path.join(self.plugin_dir, 'lib/python2.7/site-packages')
        sys.path.insert(0, import_path)

এবং একটি ভার্চুয়ালেনভ স্থাপন করছে।

উইন্ডোজের সাথে যদিও এটি অন্যরকম গল্প বলে মনে হচ্ছে। ম্যাটপ্লটলিব ইনস্টল করতে আমার সমস্যা হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.