إضافة دليل دائم إلى Pythonpath؟
-
25-09-2019 - |
سؤال
كلما استخدمت sys.path.append
, ، سيتم إضافة الدليل الجديد. ومع ذلك ، بمجرد إغلاق Python ، ستعود القائمة إلى القيم السابقة (الافتراضية؟). كيف أقوم بإضافة دليل إلى PYTHONPATH
?
المحلول
تحتاج إلى إضافة دليلك الجديد إلى متغير البيئة PYTHONPATH
, ، مفصولة القولون من المحتويات السابقة. بأي شكل من أشكال UNIX ، يمكنك القيام بذلك في برنامج نصي بدء التشغيل المناسب لأي قذيفة تستخدمها (.profile
أو أيا كان ، اعتمادًا على قذيفة المفضلة لديك) مع أمر يعتمد مرة أخرى على القشرة المعنية ؛ في Windows ، يمكنك القيام بذلك من خلال واجهة المستخدم الرسومية للنظام لهذا الغرض.
superuser.com
قد يكون مكانًا أفضل لطرح المزيد من التفاصيل ، أي لمزيد من التفاصيل إذا كنت بحاجة إلى تفاصيل حول كيفية إثراء متغير البيئة في النظام الأساسي والقذيفة المختارة ، لأنه ليس حقًا سؤال برمجة في حد ذاته.
نصائح أخرى
إذا كنت تستخدم Bash (على Mac أو GNU/Linux Distro) ، أضف هذا إلى ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
بدلا من التلاعب PYTHONPATH
يمكنك أيضًا إنشاء ملف ملف تكوين المسار. اكتشف أولاً أي دليل يبحث في Python عن هذه المعلومات:
python -m site --user-site
لسبب ما لا يبدو أن هذا يعمل في بيثون 2.7. هناك يمكنك استخدام:
python -c 'import site; site._script()' --user-site
ثم إنشاء .pth
ملف في هذا الدليل الذي يحتوي على المسار الذي تريد إضافته (قم بإنشاء الدليل إذا لم يكن موجودًا).
فمثلا:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
هذا يعمل على Windows
- على Windows ، مع Python 2.7 انتقل إلى مجلد إعداد Python.
- فتح lib/حزم الموقع.
- أضف ملفًا فارغًا.
- أضف المسار المطلوب إلى الملف ، واحد لكل سطر.
بعد ذلك ، ستتمكن من رؤية جميع الوحدات النمطية داخل تلك المسارات من البرامج النصية الخاصة بك.
في حال كان أي شخص لا يزال مرتبكًا - إذا كنت على جهاز Mac ، فافعل ما يلي:
- فتح محطة
- يكتب
open .bash_profile
- في الملف النصي الذي يظهر ، أضف هذا السطر في النهاية:
export PYTHONPATH=$PYTHONPATH:foo/bar
- احفظ الملف ، وأعد تشغيل المحطة ، وإنك
يمكنك إضافة المسار عبر ملف Pythonrc الخاص بك ، والذي يتخلف عن ~/.pythonrc على Linux. بمعنى آخر.
import sys
sys.path.append('/path/to/dir')
يمكنك أيضا تعيين PYTHONPATH
متغير البيئة ، في ملف RC عالمي ، مثل ~/.profile
على Mac أو Linux ، أو عبر لوحة التحكم -> النظام -> علامة التبويب المتقدمة -> متغيرات البيئة على Windows.
لإعطاء المزيد من التفسير ، ستقوم Python تلقائيًا ببناء مسارات البحث الخاصة بها (كما ذكرنا في الاعلى و هنا) باستخدام site.py
البرنامج النصي (عادة ما يكون في sys.prefix + lib/python<version>/site-packages
إلى جانب lib/site-python
). يمكن للمرء الحصول على قيمة sys.prefix:
python -c 'import sys; print(sys.prefix)'
ثم يضيف البرنامج النصي site.py عددًا من الدلائل ، يعتمد على النظام الأساسي ، مثل /usr/{lib,share}/python<version>/dist-packages
, /usr/local/lib/python<version>/dist-packages
إلى مسار البحث و أيضا يبحث في هذه المسارات <package>.pth
ملفات التكوين التي تحتوي على مسارات بحث إضافية محددة. فمثلا تثبيت سهل يحافظ على مجموعتها من الحزم المثبتة التي يتم إضافتها إلى ملف محدد للنظام على سبيل المثال على Ubuntu إنه /usr/local/lib/python2.7/dist-packages/easy-install.pth
. على نظام نموذجي ، توجد مجموعة من ملفات .pth حولها يمكن أن تفسر بعض المسارات غير المتوقعة في Sys.Path:
python -c 'import sys; print(sys.path)'
لذلك يمكن للمرء إنشاء ملف .pth ووضعه في أي من هذه الدلائل (بما في ذلك siteir كما هو مذكور في الاعلى). يبدو أن هذه هي الطريقة التي يتم بها إضافة معظم الحزم إلى SYS.Path بدلاً من استخدام Pythonpath.
ملاحظة: في OSX ، يوجد مسار بحث إضافي خاص تم إضافته بواسطة Site.py عن "Bruckwork Builds" (ولكن يبدو أنه يعمل مع استخدام سطر الأوامر العادي لـ Python): /Library/Python/<version>/site-packages
(مثل Python2.7: /Library/Python/2.7/site-packages/
) وهو المكان الذي من المفترض أن يتم تثبيت حزم الطرف الثالث (انظر القراءة في ذلك dir). لذلك يمكن للمرء إضافة ملف تكوين المسار هناك يحتوي على مسارات بحث إضافية على سبيل المثال إنشاء ملف يسمى /Library/Python/2.7/site-packages/pip-usr-local.pth
الذي يحتوي /usr/local/lib/python2.7/site-packages/
ثم سيضيف نظام Python النظام مسار البحث هذا.
بالنسبة لي كان الأمر يعمل عندما غيرت .bash_profile
ملف. فقط التغيير .bashrc
عمل ملف فقط حتى أعيد تشغيل القشرة.
لبيثون 2.7 يجب أن يبدو:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
عند نهاية ال .bash_profile
ملف.
على Linux ، يمكنك إنشاء رابط رمزي من الحزمة إلى دليل Pythonpath دون الحاجة إلى التعامل مع متغيرات البيئة. شيء مثل:
ln -s /your/path /usr/lib/pymodules/python2.7/
مضيفا export PYTHONPATH="${PYTHONPATH}:/my/other/path"
إلى ~/.bashrc قد لا يعمل إذا PYTHONPATH
غير موجود حاليا (بسبب :
).
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
إضافة ما سبق إلى ~/.bashrc فعلت الخدعة بالنسبة لي على Ubuntu 16.04
فقط لإضافة إجابة Awesomo ، يمكنك أيضًا إضافة هذا الخط إلى ~/.bash_profile
أو ~/.profile
على MacOS ، بدلاً من منح الطريق إلى مكتبة معينة. إعطاء مسار كامل لمجلد مشروع الجذر في
~/.bash_profile
جعلت يومي ، على سبيل المثال:
export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
بعد هذا يفعل:
source ~/.bash_profile
أضفت بشكل دائم في Windows Vista ، Python 3.5
النظام> لوحة التحكم> إعدادات النظام المتقدمة> متغيرات البيئة المتقدمة (النقر)
من فضلك ، اكتب الدليل في القيمة المتغيرة. إنها تفاصيل إجابة الفلفل الأزرق.
إضافة مسار جديد إلى Pythonpath يفعله يدويًا بواسطة:
إضافة المسار إلى ملفك الشخصي ~/.bashrc ، في المحطة بواسطة:
vim ~/.bashrc
الصق ما يلي في ملفك الشخصي
export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
ثم ، تأكد من الحصول على ملف تعريف BashRC الخاص بك عندما تقوم بتشغيل التعليمات البرمجية الخاصة بك في المحطة:
source ~/.bashrc
أتمنى أن يساعدك هذا.
في Python 3.6.4 ، يمكنك استمرار SYS.Path عبر جلسات Python مثل هذا:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
أقترح بشدة أن تستخدم VirtualEnv و VirtualEnvwrapper وإلا فإنك ستشوش طريقك
يعمل البرنامج النصي أدناه على جميع المنصات لأنه بيثون نقي. يستفيد من مسار pathlib ، موثق هنا https://docs.python.org/3/library/pathlib.html, ، لجعلها تعمل منصة. يمكنك تشغيله مرة واحدة ، أعد تشغيل النواة وهذا كل شيء. مستوحاة من https://medium.com/@arnaud.bertrand/modify-python-s-search-path-with-pth-files-2a41a4143574.
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
أقصر مسار بين <-> B هو خط مستقيم ؛
import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH']