আমার নিজের পাইথন মডিউলটি কোথায় রাখা উচিত যাতে এটি আমদানি করা যায়


89

পাইথনে আমার নিজস্ব প্যাকেজ রয়েছে এবং আমি এটি প্রায়শই ব্যবহার করি। সর্বাধিক মার্জিত বা প্রচলিত ডিরেক্টরি কোনটি যেখানে আমার প্যাকেজটি রাখা উচিত তাই এটি পাইথনপথ বা সিএস.পথ না খেলে আমদানি করা যায়?

উদাহরণস্বরূপ সাইট-প্যাকেজগুলি সম্পর্কে কী? /usr/lib/python2.7/site-packages
প্যাকেজটি অনুলিপি করে এখানে কী আটকানো সাধারণ?


4
এমন একটি সেটআপ.পি তৈরি করুন যা নির্ভরশীলতাগুলি কী বলে এবং কী ব্যবহার না করে যা আরও ভাল অনুশীলন এবং আরও পোর্টেবল হবে ... তবে হ্যাঁ সাধারণত অনুলিপি / পেস্ট ভাল কাজ করবে ... যদিও আমি সাধারণত "ব্যবহারকারী / লিবিব /" নামে একটি অতিরিক্ত ফোল্ডার তৈরি করি "বা কিছু এবং সেগুলিকে সেখানে রেখে দিন এবং এটি নিশ্চিত করুন যে এটি আমার পাইথনপথে রয়েছে
জোড়ান ব্যাসলি

4
আসল উত্তর: আমি ব্যক্তিগত উত্তর সরল স্ক্রিপ্ট / নন-ডিস্ট্রিবিউটেড প্যাকেজগুলির জন্য, যেমন @ জোড়ানবিসলে: আপনার স্ক্রিপ্টগুলিকে (বা তাদের লিঙ্কগুলি) রাখতে কিছু ফোল্ডার তৈরি করুন এবং আপনার ব্যাশের মধ্যে থেকে পাইথনপথে ফোল্ডারটি যুক্ত করুন রানকম ট্রি (যেমন স্ক্রিপ্ট / লিঙ্কগুলি এতে রাখুন ~/foo/bar/, export PYTHONPATH=~/foo/bar # fields separated by ":"আপনার ~/.bashrcফাইলে যুক্ত করুন)। দেখুন man python, এই ম্যানুয়াল পাথটি ডিফল্ট অজগর অনুসন্ধানের পথের আগে। নামের সংঘর্ষগুলি যত্নবান।

উত্তর:


64

আমি সাধারণত যে জিনিসটি চাই তা ব্যবহারকারীর সাইট ডিরেক্টরিতে আমদানি করার জন্য প্রস্তুত করে থাকি:

~/.local/lib/pythonX.X/site-packages

আপনার প্ল্যাটফর্মের জন্য সঠিক ডিরেক্টরি প্রদর্শন করতে, আপনি ব্যবহার করতে পারেন python -m site --user-site


সম্পাদনা করুন: এটি sys.pathতৈরি করার পরে এটি প্রদর্শিত হবে:

mkdir -p "`python -m site --user-site`"

যখন আমি টার্মিনাল থেকে অজগরটি খুলি, এটি সিএস.পথ দেয়। লক্ষ্য করুন সেখানে কোনও স্থানীয় নেই ['', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/usr/lib64/python2.7/plat-linux2', '/ usr / lib64 / পাইথন 2.7 / lib-tk ',' /usr/lib64/python2.7/lib-old ',' /usr/lib64/python2.7/lib-dynload ',' /usr/lib64/python2.7 / সাইট-প্যাকেজ ',' /usr/lib64/python2.7/site-packages/PIL ',' /usr/lib64/python2.7/site-packages/gst-0.10 ',' / usr / lib64 / পাইথন 2। 7 / সাইট-প্যাকেজ / gtk-2.0 ',' /usr/lib/python2.7/site-packages ',' /usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg -info ']
কোব্রি

কোনও স্ক্রিপ্ট কার্যকর করার সময় এটি যা দেয় '[/ / home / ব্যবহারকারীর নাম / ডেস্কটপ / মাইপ্যাকেজ / উদাহরণসমূহ', '/usr/lib64/python27.zip', '/usr/lib64/python2.7', '/ usr / lib64 /python2.7/plat-linux2 ',' /usr/lib64/python2.7/lib-tk ',' /usr/lib64/python2.7/lib-old ',' /usr/lib64/python2.7/ lib-dinload ',' /usr/lib64/python2.7/site-packages ',' /usr/lib64/python2.7/site-packages/PIL ',' /usr/lib64/python2.7/site-packages /gst-0.10 ',' /usr/lib64/python2.7/site-packages/gtk-2.0 ',' /usr/lib/python2.7/site-packages ',' /usr/lib/python2.7/ সাইট-প্যাকেজ / সেটআপটুলস -0.6c11-py2.7.egg-info ']
কোব্রি

পাইথন-মি সাইট - ব্যবহারকারীর সাইট / হোমে / ব্যবহারকারীর নাম / লোকাল / লিব / প্যাথন 2.7 / সাইট-প্যাকেজগুলি কিন্তু এটি সিস্টেপথের মধ্যে নেই !!
কোব্রি

@ কোব্রি python -m site --user-siteআপনাকে জানিয়ে দেবে আপনার কোন ডিরেক্টরি তৈরি করা উচিত। আপনি এটি তৈরি না করা sys.modulesপর্যন্ত এটি উপস্থিত হবে না ।
আয়া

@ মাতা আপনার সম্ভবত মধ্যবর্তী ডিরেক্টরিগুলি তৈরি করতে পরিবর্তন mkdirকরা উচিত mkdir -p। আমি একটিও ছিল না ~/.local। ;-)
আয়া

27

সুতরাং আপনার মতো আমার কোনও শিক্ষানবিস এবং আপনার ডিরেক্টরিগুলি খুব সুসংহত না হলে আপনি এই পদ্ধতিটি দেখতে চেষ্টা করতে পারেন।

আপনার পাইথন টার্মিনালটি খুলুন। আপনি জানেন এমন একটি মডিউল আমদানি করুন যা আমার ক্ষেত্রে নাম্পির মতো কাজ করে এবং নিম্নলিখিতটি করুন। Import numpy

numpy.__file__

ফলাফল যা

'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages/numpy/__init__.py'

এর ফলাফলটি numpy.__file__হল আপনার অবস্থানের সাথে অজগর ফাইলটি স্থাপন করা উচিত (বাদে numpy/__init__.py) আমার জন্য যেটি হবে

/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages

এটি করতে আপনার টার্মিনালে গিয়ে টাইপ করুন

mv "location of your module" "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site- packages"

এখন আপনার মডিউলটি আমদানি করতে সক্ষম হওয়া উচিত।


আমার পাইথনে কীভাবে আসে, "._ ফাইল_এ" কাজ করে না? >>> আমদানি পুনরায় >>> re._file_ ট্রেসব্যাক (সাম্প্রতিকতম কল শেষ): ফাইল "<pyshell # 10>", লাইন 1, মধ্যে <মডিউল> re._file_ AttributeError: মডিউল 'পুনরায়' না অ্যাট্রিবিউট 'হয়েছে ফাইল '
উরসো

4
@ উরসো আপনি কি নিশ্চিত যে আপনি দুটি আন্ডারস্কোর ব্যবহার করছেন? কমান্ডটি re.__file__আমার পক্ষে কাজ করেছিল।
এরি 64৪

অনেক অনেক ধন্যবাদ, এই ধরণের পরিষ্কার সমাধানের জন্য @ এরি 64৪। আমার জন্য ভাল কাজ করেছেন !!
বিএমএস ভরদ্বাজ

ধন্যবাদ এটি আমার জন্যও কাজ করেছিল। তবে অদ্ভুতভাবে আমি আমার এক্সপ্লোরারটিতে আমার মডিউলটি পাঠিয়েছি এমন ডিরেক্টরি / ফোল্ডারটি খুঁজে পাচ্ছি না। মনে হচ্ছে ফোল্ডারটির অস্তিত্ব নেই। কোনও ধারণা কেন ফোল্ডারটি যেখানে দেখা উচিত তা প্রদর্শিত হচ্ছে না? (আমি "লুকানো আইটেমগুলি দেখিয়েছি" সক্ষম করেছি যাতে এটি কেবল সহজ নয় ...)
আন্ড্রে

7

এটি এমন কিছু যা আমার পক্ষে কাজ করে (আমাকে প্রায়শই পাইগন প্যাকেজগুলি তৈরি করতে হয় যা একটি বেসরকারী পাইপ সংগ্রহস্থলে আপলোড করা হয়)। প্রশ্নের উত্তর @ জোরান দ্বারা মন্তব্যটি বিশদভাবে জানাচ্ছি।

  1. একটি "বিল্ড ডিরেক্টরি" তৈরি করুন যা প্যাকেজ তৈরি করতে ওয়ার্কস্পেস হিসাবে ব্যবহৃত হয়। আপনার পছন্দের যে কোনও ডিরেক্টরি কাজ করবে
  2. আপনার পাইথন প্যাকেজ দিরকে এখানে অনুলিপি করুন এবং একটি সেটআপ.পি ফাইল তৈরি করুন। এই setup.py সঠিকভাবে তৈরি সাহায্য করা উচিত।
  3. আপনি যে প্রকল্পে কাজ করছেন তার জন্য একটি ভার্চুয়ালেনভ তৈরি করুন। ভ্যুচুয়ালেভদের আরও অনেক সুবিধা রয়েছে, আমি এখানে বিশদে যাচ্ছি না।
  4. স্থানীয় ডিস্ট প্যাকেজ তৈরি করুন python setup.py sdist --format=tar। তৈরি প্যাকেজটি আদর্শভাবে distফোল্ডারে থাকা উচিত ।
  5. প্যাকেজটি আপনার ভার্চুয়ালেনভে ইনস্টল করুন (এটি সক্রিয় করার পরে)। pip install <yourpackage>.tar

আপনার pip install --force-reinstallযদি আরও লাইব্রেরিগুলির সাথে আরও খেলতে হয় এবং ডিস্ট প্যাকেজগুলি পুনরায় তৈরি করতে হয় তবে আপনি ব্যবহার করতে পারেন ।

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

শুভ হ্যাকিং


1

আমার ম্যাক এ, আমি একটি করেছি sudo find / -name "site-packages"। এটা আমার মত কয়েক পাথ দিলেন /Library/Python/2.6/site-packages, /Library/Python/2.7/site-packagesএবং /opt/X11/lib/python2.6/site-packages

সুতরাং, আমি জানতাম যে আমি আমার মডিউলগুলি কোথায় রাখব যদি আমি v2.7 বা v2.6 ব্যবহার করি।

আশা করি এটা সাহায্য করবে.


1

আমদানি ফোল্ডারগুলি নিম্নলিখিত উত্স কোড যুক্ত করে উত্তোলন করা যেতে পারে:

import sys
print sys.path

স্বয়ংক্রিয় syMLink প্রজন্মের উদাহরণটি হ'ল:

ln -s \`pip show em | grep "Location"| cut -d " " -f2\` \`python -m site --user-site\`

"এম" এর পরিবর্তে আপনি অন্যান্য প্যাকেজটি ব্যবহার করতে পারেন যা আপনি "সবেমাত্র ইনস্টল করেছেন তবে পাইথন এটি দেখতে পাচ্ছেন না"

নীচে আমি মন্তব্যে অনুরোধ করা হিসাবে আরও বিশদে ব্যাখ্যা করব।

ধরুন আপনি নীচের কমান্ড দিয়ে পাইথন মডিউল এম বা পাইসারিয়াল ইনস্টল করেছেন (উদাহরণগুলি উবুন্টুর জন্য):

sudo pip install pyserial

এবং আউটপুট এই মত:

Collecting pyserial
  Downloading pyserial-3.3-py2.py3-none-any.whl (189kB)
    100% |████████████████████████████████| 194kB 2.3MB/s 
Installing collected packages: pyserial
Successfully installed pyserial-3.3

প্রশ্নটি অনুসরণ করা হবে - পাইথন পাইরিয়াল মডিউলটি দেখতে পাচ্ছে না, কেন? কারণ যেখানে মডিউলটি ইনস্টল করা হয়েছে সেই স্থানটি অজগর নয় যা আপনার নির্দিষ্ট ব্যবহারকারী অ্যাকাউন্টের জন্য খুঁজছেন।

সমাধান - পাইথেরিয়াল যে পথে পৌঁছেছিল সেখান থেকে আমাদের অজগরটি সন্ধান করছে সেখান থেকে আমাদের সিমিলিংক তৈরি করতে হবে।

syMLink তৈরি কমান্ডটি হ'ল:

ln -s <what_to_link> <where_to_link>

সঠিক অবস্থানটি টাইপ না করে আমরা পিপ জিজ্ঞাসা করতে বলি এটি কমান্ড কার্যকর করে মডিউলগুলি কোথায় সংরক্ষণ করেছে:

pip show pyserial | grep "Location"| cut -d " " -f2

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

python -m site --user-site

উভয় কমান্ডই "` "অক্ষর দিয়ে পালাতে হবে (সাধারণত মার্কিন কীবোর্ডগুলির জন্য আপনার 1 বোতামের বাম দিকে)

ফলস্বরূপ নিম্নলিখিত কমান্ডটি এলএন এর জন্য সরবরাহ করা হবে এবং অনুপস্থিত সিমিলিংক তৈরি করা হবে:

ln -s /usr/local/lib/python2.7/dist-packages /home/<your_username>/.local/lib/python2.7/site-packages 

বা অনুরূপ কিছু, আপনার ডিস্ট্রো এবং পাইথন / পিপ ডিফল্টের উপর নির্ভর করে।


একটি শক্তিশালী ওয়ান-লাইনারের মতো দেখাচ্ছে ... আপনি আমাদের জন্য লিনাক্স নবাবিদের কিছুটা ব্যাখ্যা করতে পারেন? লোকেরা এমন কিছু ব্যবহার করতে সচেতন হতে পারে যা তারা বোঝে না :-)
পিয়ানোজেমস

-1

আপনি যদি একটি মডিউল বিকাশ করেন তবে আমি এটি অনুসরণ করার পরামর্শ দেব।

import sys
sys.path.append("/home/mylinux/python-packages")

এখন আপনি যে কোনও মডিউল python-packagesরেখেছেন তা দ্বারা আমদানিযোগ্য Python-interpreter

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