সুডোর অধীনে পাইপ ইনস্টল চালানো কি গ্রহণযোগ্য এবং নিরাপদ?


114

আমি আমার ম্যাকটি পাইথন প্যাকেজগুলি ইনস্টল করতে ব্যবহার করতে শুরু করেছি ঠিক তেমনভাবে আমার উইন্ডোজ পিসির সাথে কাজ করার সময়; তবে আমার ম্যাকের জন্য আমি ফাইল বা সাইট-প্যাকেজগুলিতে লগ লিখতে গিয়ে ঘন ঘন অনুমতি অস্বীকার ত্রুটিগুলি পেয়েছি ।

সুতরাং আমি pip install <package>অধীনে চলমান সম্পর্কে ভেবেছিলাম sudoকিন্তু আমি কি কেবলমাত্র এটি আমার বর্তমান ব্যবহারকারীর অ্যাকাউন্টের অধীনে ইনস্টল করা চাই তা বিবেচনা করে সুডোর একটি নিরাপদ / গ্রহণযোগ্য ব্যবহার?

লগফিল I / O ত্রুটি থেকে ট্রেসব্যাকের উদাহরণ:

Command /usr/bin/python -c "import setuptools;__file__='/Users/markwalker/build/pycrypto/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /var/folders/tq/hy1fz_4j27v6rstzzw4vymnr0000gp/T/pip-k6f2FU-record/install-record.txt failed with error code 1 in /Users/markwalker/build/pycrypto
Storing complete log in /Users/markwalker/Library/Logs/pip.log
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 8, in <module>
    load_entry_point('pip==1.1', 'console_scripts', 'pip')()
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/__init__.py", line 116, in main
    return command.main(args[1:], options)
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 141, in main
    log_fp = open_logfile(log_fn, 'w')
  File "/Library/Python/2.7/site-packages/pip-1.1-py2.7.egg/pip/basecommand.py", line 168, in open_logfile
    log_fp = open(filename, mode)
IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

আপডেট এটি সম্ভবত অনুমতিগুলির তুলনায় কম ছিল, তবে আপনার অজগর প্রকল্পগুলির জন্য ভার্চুয়াল পরিবেশ ব্যবহার করা সবচেয়ে ভাল উপায়। sudo pipএকেবারে প্রয়োজনীয় না হলে দৌড়ানো এড়ানো উচিত।


12
আমি দেখতে পেয়েছি যে ' cd /tmp; sudo pip install foo' একটি পর্যাপ্ত পরিশ্রমী।
ব্রায়ান কেইন


@ প্রাদুনসগ কেন এত পুরানো প্রশ্ন পতাকা?
মার্কওয়াকার_আজ

3
সংক্ষেপে, বর্তমান স্বীকৃত উত্তর (এবং প্রশ্নের আপডেটে) "সুডো পাইপ" চালানোর পরামর্শ দেয় - এমন কিছু যা পিপের রক্ষণাবেক্ষণকারীরা (আমি তাদের একজন হ'ল) ​​সক্রিয়ভাবে লোকদের না করতে বলছে যেহেতু এটি আপনার অপারেটিং সিস্টেমটি ভেঙে ফেলতে পারে MacOS এবং অনেকগুলি (সমস্ত?) লিনাক্সের প্রধান বিতরণে। কেউ যদি তাদের পরিস্থিতি ডিবাগ করতে পারে এবং কেবল এই উপদেশটিকে আরও ভাল পরামর্শের সাথে কোনও জায়গায় পুনর্নির্দেশ করতে চেয়েছিল এমন পদ ব্যবহার করার সময় আমি এখানে পৌঁছেছি। আসলে এই প্রশ্নটি আনার বিষয়ে ভাবেনি এবং উপরের বক্তব্যের সাথে মিল রেখে এটির উত্তর আরও ভাল। (চরিত্রগুলির বাইরে)
প্রডিয়ুনসগ

@ মার্কওয়াকারের_ আপনি কি এই পরামর্শটি প্রশ্ন থেকে সরিয়ে দিতে এবং সম্ভবত এটির পরিবর্তে আরও ভাল পরামর্শ (- ব্যবহারকারীর বা ভার্চুয়ালেনভ ব্যবহার করে) ব্যবহার করতে চান?
প্রাদুনসগ

উত্তর:


105

ভার্চুয়াল পরিবেশ ব্যবহার করুন :

$ virtualenv myenv
.. some output ..
$ source myenv/bin/activate
(myenv) $ pip install what-i-want

আপনি কেবলমাত্র sudoবিশ্বব্যাপী, সিস্টেম-ব্যাপী পাইথন ইনস্টলেশনের জন্য স্টাফ ইনস্টল করতে চাইলে আপনি কেবল অনুমতি বা উন্নত অনুমতি ব্যবহার করেন।

ভার্চুয়াল পরিবেশ ব্যবহার করা ভাল যা আপনার জন্য প্যাকেজগুলি পৃথক করে। এইভাবে আপনি বৈশ্বিক পাইথন ইনস্টলটিকে দূষিত না করে চারপাশে খেলতে পারেন।

বোনাস হিসাবে, ভার্চুয়ালেনভের উন্নত অনুমতিগুলির প্রয়োজন নেই।


2
যদি তার অনুমতিগুলি তার বাড়ির ডিরেক্টরিতে গণ্ডগোল করে দেয় তবে ভ্যুচুয়ালেনভ ব্যবহার করা তাকে সাহায্য করবে না
এইচডি 1

1
হ্যাঁ, এটি হবে তবে এটি ইতিমধ্যে ঘটেছে, সুতরাং চালিয়ে যাওয়ার আগে তাকে এটি ঠিক করা দরকার।
এইচডি 1

1
ধন্যবাদ বলছি, আমি পূর্বে
ভার্চুয়ালেনভ

1
এছাড়াও, ভার্চুয়ালেনভ ইনস্টল করার জন্য আপনাকে সুডো করা দরকার ... বা কোনও কার্যকারিতা নেই?
জিমিজ্জাজ

8
কেন এটি সেরা উত্তর তা আমি বুঝতে পারি না। প্রশ্নটি ভার্চুয়াল পরিবেশ সম্পর্কে নয়। এটি ব্যবহারের বৈধতা সম্পর্কে sudo pip install। ধরা যাক আমাকে কিছু প্যাকেজ ইনস্টল করতে হবে যা আমি অনেক প্রকল্পে বা সিস্টেম পর্যায়ে ব্যবহার করব। যেমন কিছু সি এল এল টুলের মতো pgcli। স্পষ্টতই এর জন্য আমার কোনও ভার্চুয়াল এনভির দরকার নেই, আমি এটি বিশ্বব্যাপী ইনস্টল করতে চাই। আমার ব্যবহার করা উচিত sudo pip installবা আরও কিছু সঠিক অনুশীলন আছে? ঐটাই প্রশ্ন.
অ্যালেক্স বেলিয়ায়েভ

42

এটি গ্রহণযোগ্য এবং pip installঅধীনে চালানো নিরাপদ sudo?

এটি নিরাপদ নয় এবং এটি ভ্রান্ত হচ্ছে - দেখুন 'সুডো পিপ' চালানোর ঝুঁকিগুলি কী কী? আপনার বাড়ির ডিরেক্টরিতে পাইথন প্যাকেজ ইনস্টল করতে আপনার রুট সুবিধার দরকার নেই। দেখুন বিবরণ এর --userপিপ করার অপশন।


যদিও আপনার সমাধানটিই প্রথম কাজ করেছিল যা আসলে কাজ করেছিল, @ থ্রো_সেক্সপেশন_এটি_ আপনি প্রকৃত কোডের সাথে একটি প্রতিক্রিয়া তৈরি করেছেন এবং ডকুমেন্টেশনে পুনর্নির্দেশ নয়
এডেনশো

আমি sudo pip installএটি ব্যবহারের ক্ষয়ক্ষতি জানি না। আমি কীভাবে এই আদেশটি বাতিল করতে পারি বা এর অধীনে চলতে অবরুদ্ধ করব sudo?
Emre Değirmenci

26

আপনার মূল সমস্যাটি হ'ল পাইপ ফোল্ডারে লগ লিখতে পারে না।

IOError: [Errno 13] Permission denied: '/Users/markwalker/Library/Logs/pip.log'

আপনাকে এমন একটি ফোল্ডারে সিডি করতে হবে /tmpযাতে প্রসেসটি অনুরোধ করা হয় এমনভাবে লিখতে পারে cd /tmpএবং কমান্ডটি পুনরায় চাওয়া হলে সম্ভবত কাজ করবে তবে আপনি যা চান তা নয়।

তবে প্রকৃতপক্ষে এই বিশেষ ক্ষেত্রে (আপনি sudoপাইথন প্যাকেজ ইনস্টল করার জন্য ব্যবহার করতে চান না ) এবং বৈশ্বিক প্যাকেজ ইনস্টলের প্রয়োজন নেই আপনি --userপতাকাটি ব্যবহার করতে পারেন :

pip install --user <packagename>

এবং এটি ঠিক কাজ করবে।

আমি অনুমান আপনি একটি একটি ব্যবহারকারী পাইথন পাইথন ইনস্টলেশন আছে এবং সম্পর্কে পড়া বিরক্ত করতে চাই না virtualenv (যা খুব userfriendly নয়) অথবা pipenv

মন্তব্য বিভাগের কিছু লোকেরা যেমন নির্দেশ করেছেন যে পরবর্তী পদ্ধতিটি খুব ভাল ধারণা নয় যদি না আপনি কী করতে চান এবং আটকে না যান:

আপনার ক্ষেত্রে যেমন আপনি কিছু করতে চান এমন বৈশ্বিক প্যাকেজগুলির জন্য অন্য পদ্ধতির :

chown -R $USER /Library/Python/2.7/site-packages/

বা আরও সাধারণভাবে

chown -R $USER <path to your global pip packages>

9
-1 বিশ্বব্যাপী সাইট-প্যাকেজ ফোল্ডারের মালিকানা পরিবর্তন করা এক ভীতিজনক কাজ। --userপিপ জন্য বিকল্প আমার উত্তর একটি সমাধান যা ইতিমধ্যে অস্তিত্ব ছিল যখন আপনি পুলিশের লিখেছিলেন যেমন দেওয়া হয়।
পাইওটর ডব্রোগস্ট

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

2
আসলে সম্পূর্ণ কমান্ড লেখার জন্য +1 । কিছু লোক ধরে নিয়েছে যে ওপি কমান্ড লাইনে কোনও বিকল্প কীভাবে প্রয়োগ করতে পারে তা যখন তারা বা অন্যান্য পাঠকরা না পারে তখন জানে । আপনি কি সম্মতি দিচ্ছেন না, @ পাইটারডব্রোগস্ট?
আমাকে

যোগ --userআমাকে সাহায্য করে!
হংহাও জাং

2
পাইথনের সম্পূর্ণ site-packagesডিরেক্টরি সিস্টেমের জন্য অনুমতিগুলি পরিবর্তন করা একটি রেঞ্চের সাহায্যে একটি পাম্পের উপর ফ্যাক্স করে "ফিক্সিং" করার অনুরূপ। এটি একটি কারণে সুরক্ষিত - আপনার সেখানে স্টাফ ইনস্টল করার কথা নয়বাস্তব সমাধান দিন থেকে দিন প্রোগ্রামিং সঙ্গে সিস্টেম পাইথন বন্টন মিশ্রিত করা হয় না। একটি পৃথক পাইথন বিতরণ ইনস্টল করুন (পাইথন.অর্গ., হোমব্রিউ, ক্যানোপি ইত্যাদি) থেকে।
charlesreid1

9

যেহেতু আমার একই সমস্যা ছিল, তাই আমি চাপ দিতে চাই যা আসলে ব্রায়ান কেইনের প্রথম মন্তব্য হ'ল "আইওআররার: [এর্নো ১৩]" - সমস্যার সমাধান:

অস্থায়ী ডিরেক্টরিতে কার্যকর করা হলে (cd /tmp ) চালিত হয় তবে আমি চালিত হলে IOError আর ঘটে না sudo pip install foo


2
এটি আপনার জন্য সমস্যার সমাধান করে কেন আপনি ব্যাখ্যা করার কোনও সুযোগ?
ক্রিস

8
আপনি এখনও sudo pipএই "সমাধান" দিয়ে ব্যবহার করছেন এবং এইভাবে মূল সুবিধাসহ প্যাকেজ ইনস্টল করছেন, যা সম্ভবত আপনি চান না?
ক্রিস

কেন এটি কাজ করে তা আমি কেবল অনুমান করতে পারি: আমি মনে করি যে পাইপ ইনস্টলেশন স্ক্রিপ্টগুলির কিছু অংশের বর্তমান ডিরেক্টরিতে লেখার অ্যাক্সেস প্রয়োজন, তবে অন্য কোনও ব্যবহারকারীর সাথে। সুতরাং, আপনার হোম ডিরেক্টরিতে থাকার সময় যদি এটি কার্যকর করা হয় তবে লেখার অ্যাক্সেসের অভাবে এটি রহস্যজনকভাবে ব্যর্থ হয়। যদি এর মধ্যে থেকে ফোন করা কার্যকর হয় /tmp, কারণ প্রত্যেকের সেখানে লেখার অ্যাক্সেস রয়েছে।
এডগার

'/ ব্যবহারকারীর
স্মারকওয়ালার

5

virtualenvwrapperসফলভাবে ইনস্টল করার পরে আমার ইনস্টল করতে সমস্যা হয়েছিলvirtualenv

আমি এটি করার পরে আমার টার্মিনাল অভিযোগ করেছে:

pip install virtualenvwrapper

সুতরাং, আমি ব্যর্থতার সাথে এটি চেষ্টা করেছি (প্রস্তাবিত নয়) :

sudo pip install virtualenvwrapper

তারপরে, আমি এটির সাথে এটি সফলভাবে ইনস্টল করেছি:

pip install --user virtualenvwrapper

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

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

ভবিষ্যতের পাঠকদের জন্য, আমি উপরের মন্তব্যের কারণে আমার উত্তরে আমার "প্রস্তাবিত" পতাকাটি আঘাত করেছি তবে আমি এখনও এটি যাচাই করতে পারি নি। এজন্য আমি এখনও পতাকাটি মুছলাম না।
আমাকে এর সম্পর্কে টিঙ্ক দিন

4

দেখে মনে হচ্ছে আপনার অনুমতিগুলি গণ্ডগোল হয়েছে। chown -R markwalker ~টার্মিনাল টাইপ করুন এবং pipআবার চেষ্টা করুন ? আপনার বাছাই করা থাকলে আমাকে জানান।


যদিও এটি অনুমতিগুলির সমস্যার সমাধান করতে পারে তবে এটি প্রশ্নের উত্তর দেয় না।
বুরহান খালিদ

1
সমস্যার সমাধান আমি জানি না আমার কাছে বোনাস! অনেক লুকানো ডায়ার chownদিচ্ছে Operation not permittedযেমন .shsh& আমি ধরে নিচ্ছি এটি এখন সেট করতে পারে এমন ফাইলগুলির মাধ্যমে এটি কাজ করছে, তবে ক্লিপ প্রম্পট ফিরে এলে কী ঘটবে তা আমি দেখতে পাচ্ছি।
মার্কওয়াকার_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.