কমান্ড লাইনে পাইথন স্ক্রিপ্ট এর ডিরেক্টরিতে সিডি-ইন না করে কীভাবে ব্যবহার করতে পারি? এটি কি পাইথনপথ?


157

আমি কীভাবে পাইথনপথের কোনও ব্যবহার করতে পারি? আমি যখন স্ক্রিপ্ট চালানোর চেষ্টা করি তখন ফাইলটি খুঁজে পাওয়া যায় না। আমি যখন স্ক্রিপ্টটি স্ক্রিপ্টটি ধারণ করে সেই ডিরেক্টরিতে সিডি করি। সুতরাং পাইথনপথ ভাল কি?

$ echo $PYTHONPATH
:/home/randy/lib/python

$ tree -L 1 '/home/randy/lib/python' 
/home/randy/lib/python
├── gbmx_html.py
├── gbmx.py
├── __init__.py
├── __pycache__
├── scripts
└── yesno.py

$ python gbmx.py -h
python: can't open file 'gbmx.py': [Errno 2] No such file or directory

$ cd '/home/randy/lib/python'

ফাইল ডিরেক্টরিতে সিডি করার পরে এটি চলমান ..

$ python gbmx.py -h
usage: gbmx.py [-h] [-b]

আমি পাইথনপথের কোনও ব্যবহার করতে পারি না কেন?


1
আমরা কি এই পোস্টের শিরোনাম পরিবর্তন করতে পারি? এটি আসলে কোনও ব্যাখ্যা চাইছে না PYTHONPATH
নিকো সের্নেক

সম্পাদিত শিরোনাম কারণ এই প্রথম জিনিসটি PYTHONPATH
গুগল

উত্তর:


194

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

পাইথনপথ মডিউল ফাইলগুলির জন্য ডিফল্ট অনুসন্ধানের পথ Aug ফর্ম্যাটটি শেলের PATH এর সমান: এক বা একাধিক ডিরেক্টরি পাথের নামগুলি os.pathsep দ্বারা পৃথক করা হয়েছে (যেমন উইন্ডোজে ইউনিক্সে কলোন বা সেমিকোলন)। অস্তিত্বহীন ডিরেক্টরিগুলি চুপচাপ উপেক্ষা করা হয়।

সাধারণ ডিরেক্টরি ছাড়াও পৃথক পাইথনপথ এন্ট্রি খাঁটি পাইথন মডিউলগুলি (উত্স বা সংকলিত আকারে) সহ জিপফাইলে উল্লেখ করতে পারে। জিপ ফাইলগুলি থেকে এক্সটেনশন মডিউলগুলি আমদানি করা যায় না।

ডিফল্ট অনুসন্ধানের পথটি ইনস্টলেশন নির্ভর, তবে সাধারণত উপসর্গ / lib / পাইথোনভার্সন দিয়ে শুরু হয় (উপরে পাইথনহোম দেখুন)। এটি সর্বদা পাইথনপথে সংযুক্ত থাকে।

ইন্টারফেস অপশনগুলির আওতায় উপরে বর্ণিত পাইথনপথের সামনে অনুসন্ধানের পথে একটি অতিরিক্ত ডিরেক্টরি সন্নিবেশ করা হবে। পাইথন প্রোগ্রামের মধ্যে থেকে অনুসন্ধানের পথটি ভেরিয়েবল sys.path হিসাবে চালিত করা যায়।

http://docs.python.org/2/using/cmdline.html#envvar-PYTHONPATH

আপনি যা খুঁজছেন তা হ'ল পথ

export PATH=$PATH:/home/randy/lib/python 

তবে প্রোগ্রাম হিসাবে আপনার অজগর স্ক্রিপ্টটি চালানোর জন্য আপনাকে প্রথম লাইনে পাইথনের জন্য একটি শেবাং সেট করতে হবে । এর মতো কিছু কাজ করা উচিত:

#!/usr/bin/env python

এবং এটিকে কার্যকর করার সুযোগ দিন:

chmod +x /home/randy/lib/python/gbmx.py

তারপরে আপনার gmbx.pyযে কোনও জায়গা থেকে সহজেই চালানো উচিত ।


2
ধন্যবাদ বন্ধু. আমি এখনও এটি আয়ত্ত করছি। আমার স্ক্রিপ্টটি আমার কাস্টম পাইথনপথ থেকে আমার মডিউলগুলি আমদানি করতে সফল হয়েছে। এবং এখন আমি পার্থক্যটি বুঝতে পারি: এটি সমস্ত স্ক্রিপ্ট বনাম মডিউল সম্পর্কে; কমান্ড স্ক্রিপ্ট কল বনাম পাইথন আমদানি। হ্যাঁ, আমি প্রকৃতপক্ষে ব্যবহার করবexport PATH=$PATH:/home/etc
র্যান্ডি স্ক্রেটকা

57

আপনি পথ এবং পাইথনপথকে বিভ্রান্ত করছেন। আপনার এটি করা দরকার:

export PATH=$PATH:/home/randy/lib/python 

পাইথনপথ কোন মডিউলগুলি লোড করতে হবে তা নির্ধারণ করতে পাইথন ইন্টারপ্রেটার ব্যবহার করে।

কোন এক্সিকিউটেবল চালানো হবে তা নির্ধারণ করতে PATH শেল দ্বারা ব্যবহৃত হয়।


38

PYTHONPATHimportআর্গুমেন্ট হিসাবে দেওয়া পাইথন ফাইলগুলির শীর্ষ স্তরের পাইথন ইন্টারপ্রেটারের অনুসন্ধান নয়, কেবল বিবৃতিগুলিকেই প্রভাবিত করে ।

PYTHONPATHসেট করা দরকার একটি দুর্দান্ত ধারণা নয় - যেমন পরিবেশের ভেরিয়েবলের উপর নির্ভরশীল যে কোনও কিছু, বিভিন্ন মেশিনে ধারাবাহিকভাবে জিনিসগুলি প্রতিলিপি করা জটিল হয়ে ওঠে। পাইথন 'প্যাকেজ' ব্যবহার করা আরও ভাল যা ইনস্টল করা যেতে পারে ('পাইপ', বা ডিস্ট্রিল্টস ব্যবহার করে) সিস্টেম-নির্ভর পাথগুলিতে যা পাইথন ইতিমধ্যে জানে।

একটি পড়া আছে https://the-hitchhikers-guide-to-packaging.readthedocs.org/en/latest/ , 'প্যাকেজিং করতে Hitchhiker নির্দেশিকা' এবং - http://docs.python.org/3/tutorial /modules.html - যা পাইথোনপথ এবং নিম্ন স্তরের প্যাকেজগুলি ব্যাখ্যা করে।


পয়েন্ট নেওয়া হয়েছে। এই বিশেষ ক্ষেত্রে পাইথনপথে যোগ করা ভালভাবে কাজ করে বলে মনে হচ্ছে। একটি মেশিনে একজন ব্যবহারকারী হিসাবে আমি ইতিমধ্যে কিছু লিখিত .py কোড ব্যবহার করে পুনরায় ব্যবহার করতে পারি।
র্যান্ডি স্ক্রেটকা

1
আমি ভাল সিস্টেম নির্ভরশীল পাথ অনেক কিছু ইনস্টল করার তা মনে করি না, রুট অ্যাক্সেস সহ প্রয়োজনীয় ব্যবহার চেয়ে ভাল ধারণা PYTHONPATH। পাইথন প্রোগ্রামের সাথে আমি আর কতবার মোকাবিলা করতে পেরেছি তা আর গণ্য করি না যে আমি যে pip installহোস্টে নিয়মিত ব্যবহারকারী ছিলাম সেখানে কেবল রুট অ্যাক্সেস ছাড়াই নয় (আমি জানি পিপ স্থানীয় ইনস্টলেশন করতে পারে) তবে পাইপ ছাড়াই পাইথন সফটওয়্যার বিতরণকারী প্রত্যেককে এখানে একটি পরামর্শ দেওয়া হয়েছে - প্রথমে প্রথমে ভ্যানিলা লিনাক্স হোস্টে নিজের সফ্টওয়্যার ইনস্টল করার চেষ্টা করুন যেখানে আপনার রুট অ্যাক্সেস নেই এবং কেবলমাত্র পাইথন বিতরণ।
amn

3

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

which myscript.py

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

$python
Python 2.7.8 blahblahblah
...
>from mymodule.submodule import ClassName
>test = ClassName()
>^D
$myscript_that_needs_mymodule.submodule.py
Traceback (most recent call last):
  File "myscript_that_needs_mymodule.submodule.py", line 5, in <module>
    from mymodule.submodule import ClassName
  File "/path/to/myscript_that_needs_mymodule.submodule.py", line 5, in <module>
    from mymodule.submodule import ClassName
ImportError: No module named submodule

3

আপনার উদাহরণ হিসাবে পাইথনপথ সেট হিসাবে, আপনি করতে সক্ষম হওয়া উচিত

python -m gmbx

-mআপনি পাইথনপথে যা যুক্ত করেছেন সেগুলি সহ পাইথন সাধারণত পাথগুলিতে পাইথন অনুসন্ধানগুলিকে আপনার মডিউলটির জন্য অনুসন্ধান করবে। আপনি যখন python gmbx.pyদোভাষীটি চালান , তখন এটি নির্দিষ্ট ফাইলের সন্ধান করে এবং পাইথনপ্যাথ প্রয়োগ হয় না।

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