এল ক্যাপিটনে আইপথনের জন্য পাইপ একটি ম্যানপেজ ইনস্টল করার চেষ্টা করার সময় এই সমস্যাটি প্রায়শই দেখা দেয়। দ্রুত সমাধানটি হ'ল এটির মতো একটি পাইপ কমান্ড ব্যবহার করা:
sudo -H pip install --install-option '--install-data=/usr/local' <package>
যাইহোক, এল ক্যাপিটেনের সিস্টেম ইন্টিগ্রিটি প্রোটেকশন (এসআইপি) পিপ সহ বিভিন্ন খারাপ অভ্যাসগুলি ব্লক করে যা স্লাইড ব্যবহার করে, তাই আপনাকে সম্ভবত এল ক্যাপিটেনের পিপ সুচারুভাবে চলতে আরও কিছু পরিবর্তন করতে হবে।
এল ক্যাপিটনে এসআইপি ওএস এক্স-তে পাইথনের অ্যাপল সরবরাহিত সংস্করণ সহ পাইপ ব্যবহার করে তিনটি সমস্যা প্রকাশ করেছে:
ডিস্টুটিসগুলি ম্যাক্সে দুটি গুরুত্বপূর্ণ ভেরিয়েবল সঠিকভাবে সেট করে না, তাই পিপ হেডার এবং অন্যান্য ভাগ করা ফাইলগুলি (যেমন, ম্যানেজগুলি) এর অধীনে লেখার চেষ্টা করে /System/Library/Frameworks/Python.framework/Versions/2.7/
। এটি একটি খারাপ ধারণা, তবে ওএস এক্স-এর পূর্ববর্তী সংস্করণগুলিতে, sudo দিয়ে পিপ চালানো হলে এটি সফল হয়েছিল। তবে এসআইপির কারণে এটি এল ক্যাপিটেনে ব্যর্থ। এটি আপনার দ্বারা চালিত ত্রুটি। এটি মত বার্তা দেয়OSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'
অ্যাপল কিছু প্যাকেজগুলির /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
(যেমন, ছয়) পুরানো সংস্করণ ইনস্টল করে । ওএস এক্স এর পূর্ববর্তী সংস্করণগুলিতে, আপনি যখন একটি প্যাকেজ ইনস্টল করেছেন যার মধ্যে একটির একটি নতুন সংস্করণ প্রয়োজন, sudo pip
নীরবে /System/
ফোল্ডারটি থেকে পুরানো সংস্করণটি সরিয়ে ফেলা হবে এবং এতে একটি নতুন সংস্করণ ইনস্টল করবে /Library/Python/2.7/site-packages
। এটিও একটি খারাপ ধারণা ছিল এবং এসআইপি দিয়ে আর সম্ভব হয় না। তবে এখন পুরানো প্যাকেজটি সরানোর চেষ্টা করার সময় একটি ত্রুটি বার্তা সহ পাইপ ক্র্যাশ হবে। এই বার্তাটিও OSError: [Errno: 1]
তবে এটি একটি বার্তার পরে আসে Uninstalling six-1.4.1:
। দেখুন, যেমন, https://github.com/pypa/pip/issues/3165 ।
পাইথনের অ্যাপল সংস্করণ স্ট্যান্ডার্ড ব্যবহারকারী-অ্যাক্সেসযোগ্য প্যাকেজ ইনস্টলেশন অবস্থানের উপরে/System/Library/Frameworks/Python.framework/Versions/2.7/
পাইথন অনুসন্ধানের পথের নিচে বেশ কয়েকটি ডিরেক্টরি যুক্ত করে । সুতরাং আপনি যদি অন্য কোনও প্যাকেজের নতুন সংস্করণ ইনস্টল করেন (উদাঃ ), আপনি একটি বার্তা পাবেন যে ইনস্টলেশনটি সফল হয়েছে তবে আপনি যখন অজগরটি চালাবেন তখন আপনি পুরানো সংস্করণটি পাবেন । এটি স্ট্যান্ডার্ড লাইব্রেরি থেকে মডিউল হিসাবে একই নামের নতুন প্যাকেজগুলি ব্যবহার করাও অসম্ভব করে তোলে।sudo -H pip install --ignore-installed six
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
আপনি এই সমস্যাগুলি নিয়ে কাজ করতে পারেন তবে পদ্ধতিটি তিনটি প্রশ্নের উত্তরগুলির উপর নির্ভর করে।
- আপনি কি পাইথনের ম্যাক ওএস এক্স সংস্করণ ব্যবহার চালিয়ে যেতে চান বা নিজের ইনস্টল করতে চান? আপনার নিজেরাই ইনস্টল করা সবচেয়ে নিরাপদ বিকল্প এবং এটি অফিসিয়াল পাইথন ইনস্টলার, হোমব্রিউ বা অ্যানাকোন্ডার মাধ্যমে করা যেতে পারে। এটাও কি অ্যাপল বিশেষ পরামর্শ দেওয়া হচ্ছে , যেমন @Sacrilicious দ্বারা নির্দিষ্ট । যদি আপনি পাইথনের নিজস্ব সংস্করণ ইনস্টল করেন তবে আপনার সম্ভবত বর্তমানে ইনস্টল থাকা কিছু
/Library/Python/2.7/site-packages
এবং /usr/local/bin
সেই প্যাকেজগুলির জন্য ইনস্টল করা কোনও স্ক্রিপ্ট (পাইপ সহ) আনইনস্টল করা উচিত । অন্যথায় আপনার কাছে পাইথনের সিস্টেম ইনস্টলড সংস্করণ অ্যাক্সেস করার কিছু স্ক্রিপ্টগুলির বিরক্তিকর অভিজ্ঞতা এবং কিছু আপনার নিজস্ব ইনস্টলেশন অ্যাক্সেস করতে পারে।
আপনি যদি সিস্টেম ইনস্টলড পাইথনটির সাথে তাল মিলাতে চান তবে আপনাকে আরও দুটি সিদ্ধান্ত নিতে হবে:
আপনি কি সমস্ত ব্যবহারকারীর জন্য প্যাকেজ ইনস্টল করতে চান, বা কেবল নিজের জন্য? সমস্ত ব্যবহারকারীর জন্য ইনস্টল করার বিষয়টি নিশ্চিত করে যে পাইথন ব্যবহারকারী প্রতিটি প্রোগ্রাম (সম্ভবত প্রশাসনিক স্ক্রিপ্টগুলি সহ) আপনার ইনস্টল করা সমস্ত প্যাকেজগুলির অ্যাক্সেস থাকবে। তবে, এটি একটি দূরে সম্ভাবনা রয়েছে যে এটি এল ক্যাপিটনের নিজস্ব পাইথন ব্যবহারে হস্তক্ষেপ করবে। (আমি আশা করব যে অ্যাপল python -S
সর্বদা তাদের প্রত্যাশিত প্যাকেজগুলি পাবে তা নিশ্চিত করার জন্য তারা ব্যবহার করে তবে এটি পরীক্ষা করার মতো আমার কোনও উপায় নেই)) কেবলমাত্র আপনার নিজের অ্যাকাউন্টের জন্য ইনস্টল করা সিস্টেম পাইথন ইনস্টলেশনের সাথে হস্তক্ষেপের সম্ভাবনা দূর করে। দ্রষ্টব্য: আপনি যদি সিস্টেম ব্যাপী ইনস্টলেশন থেকে কেবল ব্যবহারকারী-এ স্যুইচ করতে চলেছেন তবে সম্ভবত বর্তমানে ইনস্টল থাকা /Library/Python/2.7/site-packages
এবং সম্পর্কিত স্ক্রিপ্টগুলিতে আনইনস্টল করার জন্য আপনার এই সুযোগটি নেওয়া উচিত /usr/local/bin
।
আপনি কি পাইথনের ওএস এক্স সংস্করণ (নীচে /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
) এর সাথে ইনস্টল করা অতিরিক্ত প্যাকেজগুলি গোপন করতে চান বা তাদের অনুসন্ধানের পথে রাখতে চান? আমি এগুলি গোপন করার পরামর্শ দিচ্ছি, যাতে প্রয়োজন অনুসারে এই প্যাকেজগুলির নতুন সংস্করণগুলি ব্যবহারকারী-অ্যাক্সেসযোগ্য স্থানে স্বয়ংক্রিয়ভাবে ইনস্টল হয়ে যায়। আপনি যদি এই ডিরেক্টরিটি আড়াল না করেন তবে আপনি মাঝে মাঝে বার্তাগুলি পাবেন যে কোনও পরবর্তী প্যাকেজটি পরবর্তী সংস্করণে আপগ্রেড করার জন্য কোনও পাইপ কোনও বিদ্যমান প্যাকেজটি সরাতে অক্ষম ছিল (আপনি ইনস্টল করছেন এমন একটি পৃথক প্যাকেজের প্রয়োজন)। pip install --ignore-installed <package>
সেক্ষেত্রে আপনাকে চালনা করতে হবে যা নতুন সংস্করণ ইনস্টল করবে এবং সিস্টেম-ইনস্টল করা সংস্করণটি আড়াল করবে। তবে পুরোটা লুকিয়ে রাখলে/System/.../Extras/...
ডিরেক্টরি, আপনি কিছু অ্যাপল প্যাকেজগুলির অ্যাক্সেস হারাবেন যা পাইপের মাধ্যমে পাওয়া যায় না, যেমন, কোরগ্রাফিক্স এবং বনজোর। (আপনার যদি এগুলির প্রয়োজন হয় তবে আপনি সেগুলি আপনার সাইট-প্যাকেজ ডিরেক্টরিতে সিমিলিং করে অ্যাক্সেস পেতে সক্ষম হতে পারেন))
এখন, কর্মক্ষেত্র এখানে। অপারেটিং সিস্টেম দ্বারা ব্যবহৃত পাইথন প্যাকেজগুলি দুর্ঘটনাক্রমে প্রতিস্থাপন বা অপসারণ এড়াতে ওএস এক্স এর সমস্ত সংস্করণে এগুলি ভাল অনুশীলন হবে; তবে আপনি ওএস এক্স এল ক্যাপিটেনে (10.11) পাইথনের অ্যাপল সরবরাহিত সংস্করণ সহ ব্যবহারকারী-ইনস্টল করা প্যাকেজগুলি ব্যবহার করতে চাইলে এগুলি প্রয়োজনীয়।
পাইপ ইনস্টল করুন
আপনি সম্ভবত এটি ইতিমধ্যে করেছেন, তবে তা না হলে আপনি সমস্ত ব্যবহারকারীর জন্য পাইপ ইনস্টল করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন :
sudo -H easy_install pip
# pip script will be installed in /usr/local/bin
অথবা কেবলমাত্র আপনার নিজের ব্যবহারকারী অ্যাকাউন্টের জন্য পাইপ ইনস্টল করতে এই আদেশটি ব্যবহার করুন :
easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin
ভাগ করা ফাইল অবস্থানগুলি পরিচালনা করুন
আপনি যদি সমস্ত ব্যবহারকারীর জন্য প্যাকেজ ইনস্টল করছেন তবে এই লাইনগুলি দিয়ে (। Https://github.com/pypa/pip/issues/426 থেকে ) .pydistutils.cfg নামে একটি ফাইল তৈরি করুন :
[install]
install-data=/usr/local
install-headers=/usr/local
আপনি যদি সাধারণত ব্যবহার করেন sudo -H pip ...
তবে আপনার এই ফাইলটি /var/root
(রুট ব্যবহারকারীর জন্য হোম ডিরেক্টরি) রাখা উচিত। আপনি যদি সাধারণত ব্যবহার করেন sudo pip ...
তবে আপনার নিজের হোম ডিরেক্টরিতে (~) এই ফাইলটি রাখা উচিত।
এই সেটিংসটি পিপকে ভাগ করা আইটেমগুলি যেমন হেডার এবং ম্যানপেজগুলির অধীনে লেখার চেষ্টা করতে বাধা দেবে /Library/System
। (এই উত্তরের উপরের কমান্ডটি একই জিনিসটির দ্রুত সংস্করণ)) এই সেটিংসটির প্রয়োজন কারণ ডারউইন-নির্দিষ্ট কোডটি /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.py
এই ভেরিয়েবলগুলিকে মূল-রচনীয় স্থানে সেট করতে ব্যর্থ হয় (যদিও এটি অন্যান্য ভেরিয়েবলগুলি সঠিকভাবে সেট করে)। Https://github.com/pypa/pip/issues/3177 এ এখানে আরও তথ্য রয়েছে ।
আপনি যদি কেবল নিজের ব্যবহারকারী অ্যাকাউন্টের জন্য প্যাকেজ ইনস্টল করেন তবে ভাগ করা আইটেমগুলি স্বয়ংক্রিয়ভাবে এর অধীনে ইনস্টল হবে ~/Library/Python/2.7/
। তবে আপনার নিজের / pr প্রোফাইলে নিম্নলিখিত লাইনগুলি যুক্ত করা উচিত যাতে আপনার যখন প্রয়োজন হয় তখন ভাগ করা আইটেমগুলি পাওয়া যায়:
export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH
দ্রষ্টব্য: পরিবর্তনগুলি কার্যকর করার জন্য আপনাকে একটি নতুন শেল শুরু করতে হবে বা কমান্ড লাইনে এগুলি চালাতে হবে। আপনি hash -r
যদি সম্প্রতি পথ থেকে পুরানো স্ক্রিপ্টগুলি সরিয়ে ফেলে থাকেন তবে আপনিও চালাতে চাইতে পারেন।
পাইথন পাথ পরিচালনা করুন
আপনাকে নিশ্চিত করতে হবে যে আপনি ইনস্টল করা প্যাকেজগুলি সিস্টেম-ইনস্টলড প্যাকেজগুলির চেয়ে পাইথনের অনুসন্ধান ক্রমে বেশি। এটি করার সবচেয়ে সহজ উপায় হ'ল .pth
ফাইলগুলি। এটি এই পৃষ্ঠায় অন্য কোথাও @ স্যাক্রিলিসিসের পরামর্শ অনুসরণ করে তবে এটি নিশ্চিত করে যে আপনার ব্যবহারকারী-সাইট-প্যাকেজ ডিরেক্টরিটি আপনার সিস্টেম-ব্যাপী সাইট-প্যাকেজ ডিরেক্টরিগুলির আগে অনুসন্ধান করা হবে এবং উভয়ই স্ট্যান্ডার্ড লাইব্রেরি এবং অ্যাপলের অতিরিক্ত ডিরেক্টরি (উভয় / সিস্টেমের অধীনে) অনুসন্ধানের আগে অনুসন্ধান করা হবে। ..)। এটি /System/.../Extras
চাইলে অনুসন্ধানের পথ থেকে বাদ দেয় ।
fix_mac_path.pth
নীচের পাঠ্য সহ একটি ফাইল তৈরি করুন । আপনি যদি সমস্ত ব্যবহারকারীর জন্য প্যাকেজ ইনস্টল করে থাকেন তবে fix_mac_path.pth
এটি স্থাপন করা উচিত /Library/Python/2.7/site-packages
। আপনি যদি কেবল নিজের ব্যবহারকারীর জন্য ইনস্টল fix_mac_path.pth
করছেন তবে ~ / গ্রন্থাগার / পাইথন / ২.7 / লিবিব / পাইথন / সাইট-প্যাকেজগুলিতে থাকা উচিত। (এই ফাইলটিতে আপনার যে কোনও নাম থাকতে পারে, তবে এটি একটি বা উভয় অবস্থানের মধ্যে স্থাপন করতে হবে এবং এটির সাথে এটি শেষ করতে হবে .pth
; এছাড়াও, এই ফাইলটির সমস্ত পাঠ্য একটি লাইনে থাকতে হবে))
আপনি যদি অ্যাপল-ইনস্টল করা প্যাকেজগুলিকে এতে লুকিয়ে রাখতে চান /System/.../Extras
:
অ্যাপল-সরবরাহিত সংস্করণ থেকে পিপ / সেটআপলগুলিতে স্বতন্ত্রভাবে একটি কার্যকরী অনুলিপি পেতে প্রথমে নিম্নলিখিত কমান্ডগুলির মধ্যে একটি চালান:
pip install --ignore-installed --user setuptools # your account only
# or
sudo -H pip install --ignore-installed setuptools # all users
তারপরে নীচের কোডটি fix_mac_path.pth
উপরে উল্লিখিত অবস্থানে রাখুন:
import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths
আপনি যদি অ্যাপল ইনস্টল করা প্যাকেজগুলি ব্যবহার করতে চান তবে আপনার আর একটি অনুলিপি সেটআপলগুলির দরকার নেই। কেবলমাত্র fix_mac_path.pth
উপরে উল্লিখিত অবস্থানে নিম্নলিখিত কোডটি লিখুন :
import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths
এর পরে, আপনি python -m site
নিশ্চিত করতে ব্যবহার করতে পারেন যে পথে অনুসন্ধানের অর্ডারটি বোঝায়।
প্যাকেজ ইনস্টল করুন
এর পরে, নিম্নলিখিত কমান্ডগুলির মধ্যে একটি ব্যবহার করে আপনার নতুন প্যাকেজ ইনস্টল করতে সক্ষম হওয়া উচিত।
সকল ব্যবহারকারীর জন্য:
sudo -H pip install <package>
আপনার নিজস্ব ব্যবহারকারীর জন্য:
pip install --user <package>