سؤال

كلما استخدمت 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

  1. على Windows ، مع Python 2.7 انتقل إلى مجلد إعداد Python.
  2. فتح lib/حزم الموقع.
  3. أضف ملفًا فارغًا.
  4. أضف المسار المطلوب إلى الملف ، واحد لكل سطر.

بعد ذلك ، ستتمكن من رؤية جميع الوحدات النمطية داخل تلك المسارات من البرامج النصية الخاصة بك.

في حال كان أي شخص لا يزال مرتبكًا - إذا كنت على جهاز Mac ، فافعل ما يلي:

  1. فتح محطة
  2. يكتب open .bash_profile
  3. في الملف النصي الذي يظهر ، أضف هذا السطر في النهاية:export PYTHONPATH=$PYTHONPATH:foo/bar
  4. احفظ الملف ، وأعد تشغيل المحطة ، وإنك

يمكنك إضافة المسار عبر ملف 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']
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top