تثبيت نسخة التطوير من scikit-learn#

يقدم هذا القسم كيفية تثبيت الفرع الرئيسي من scikit-learn. يمكن القيام بذلك إما عن طريق تثبيت نسخة ليلية أو البناء من المصدر.

تثبيت النسخ الليلية#

تقوم خوادم التكامل المستمر لمشروع scikit-learn ببناء واختبار وتحميل حزم wheel لأحدث إصدار من Python على أساس ليلي.

يُعد تثبيت نسخة ليلية أسرع طريقة لـ:

  • تجربة ميزة جديدة سيتم شحنها في الإصدار التالي (أي ميزة من طلب سحب تم دمجه مؤخرًا في الفرع الرئيسي)؛

  • التحقق مما إذا كان قد تم إصلاح خطأ واجهته منذ الإصدار الأخير.

يمكنك تثبيت النسخة الليلية من scikit-learn باستخدام فهرس scientific-python-nightly-wheels من سجل PyPI لـ anaconda.org:

pip install --pre --extra-index https://pypi.anaconda.org/scientific-python-nightly-wheels/simple scikit-learn

لاحظ أنه قد يلزم إلغاء تثبيت scikit-learn أولاً لتتمكن من تثبيت النسخ الليلية من scikit-learn.

البناء من المصدر#

البناء من المصدر مطلوب للعمل على مساهمة (إصلاح خطأ، ميزة جديدة، تحسين التعليمات البرمجية أو الوثائق).

  1. استخدم Git للتحقق من أحدث مصدر من مستودع scikit-learn على Github.:

    git clone git@github.com:scikit-learn/scikit-learn.git  # add --depth 1 if your connection is slow
    cd scikit-learn
    

    إذا كنت تخطط لتقديم طلب سحب، فيجب عليك الاستنساخ من الشوكة الخاصة بك بدلاً من ذلك.

  2. ثبّت إصدارًا حديثًا من Python (3.9 أو أحدث وقت كتابة هذا التقرير) على سبيل المثال باستخدام Miniforge3. يوفر Miniforge توزيعًا قائمًا على conda لـ Python وأكثر المكتبات العلمية شيوعًا.

    إذا قمت بتثبيت Python باستخدام conda، فإننا نوصي بإنشاء `بيئة conda`_ مخصصة مع جميع تبعيات البناء الخاصة بـ scikit-learn (أي NumPy و SciPy و Cython و meson-python و Ninja):

    conda create -n sklearn-env -c conda-forge python numpy scipy cython meson-python ninja
    

    ليس من الضروري دائمًا ولكن من الأكثر أمانًا فتح موجه أوامر جديد قبل تنشيط بيئة conda المنشأة حديثًا.

    conda activate sklearn-env
    
  3. بديل لـ conda: يمكنك استخدام عمليات تثبيت بديلة لـ Python بشرط أن تكون حديثة بما فيه الكفاية (3.9 أو أعلى وقت كتابة هذا التقرير). فيما يلي مثال حول كيفية إنشاء بيئة بناء لـ Python على نظام Linux. يتم تثبيت تبعيات البناء باستخدام pip في virtualenv مخصص لتجنب تعطيل برامج Python الأخرى المثبتة على النظام:

    python3 -m venv sklearn-env
    source sklearn-env/bin/activate
    pip install wheel numpy scipy cython meson-python ninja
    
  4. ثبّت مترجمًا مع دعم OpenMP لمنصتك. انظر التعليمات الخاصة بـ Windows و macOS و Linux و FreeBSD.

  5. بناء المشروع باستخدام pip:

    pip install --editable . \
       --verbose --no-build-isolation \
       --config-settings editable-verbose=true
    
  6. تحقق من أن scikit-learn المثبت لديه رقم إصدار ينتهي بـ .dev0:

    python -c "import sklearn; sklearn.show_versions()"
    
  7. يرجى الرجوع إلى دليل المطورين و أسماء مستعارة وأعلام pytest مفيدة لتشغيل الاختبارات على الوحدة التي تختارها.

ملاحظة

--config-settings editable-verbose=true اختياري ولكنه موصى به لتجنب المفاجآت عند استيراد sklearn. يُنفِّذ meson-python عمليات التثبيت القابلة للتحرير عن طريق إعادة بناء sklearn عند تنفيذ import sklearn. مع الإعداد الموصى به، سترى رسالة عندما يحدث هذا، بدلاً من الانتظار المحتمل بدون تغذية مرتدة والتساؤل عما يستغرق وقتًا طويلاً. مكافأة: هذا يعني أنك تحتاج فقط إلى تشغيل الأمر pip install مرة واحدة، سيتم إعادة بناء sklearn تلقائيًا عند استيراد sklearn.

التبعيات#

تبعيات وقت التشغيل#

يتطلب Scikit-learn التبعيات التالية في وقت البناء وفي وقت التشغيل:

  • Python (>= 3.8)

  • NumPy (>= 1.19.5)

  • SciPy (>= 1.6.0)

  • Joblib (>= 1.2.0)

  • threadpoolctl (>= 3.1.0).

تبعيات البناء#

يتطلب بناء Scikit-learn أيضًا:

ملاحظة

إذا لم يكن OpenMP مدعومًا من قبل المترجم، فسيتم البناء مع تعطيل وظائف OpenMP. لا يوصى بذلك لأنه سيجبر بعض المقدرات على التشغيل في الوضع التسلسلي بدلاً من الاستفادة من التوازي القائم على الخيوط. سيؤدي تعيين متغير البيئة SKLEARN_FAIL_NO_OPENMP (قبل cythonization) إلى فشل البناء إذا لم يكن OpenMP مدعومًا.

منذ الإصدار 0.21، يكتشف scikit-learn تلقائيًا ويستخدم مكتبة الجبر الخطي التي يستخدمها SciPy في وقت التشغيل. لذلك ليس لدى Scikit-learn تبعية بناء على تطبيقات BLAS/LAPACK مثل OpenBlas أو Atlas أو Blis أو MKL.

تبعيات الاختبار#

يتطلب تشغيل الاختبارات:

  • pytest >= 7.1.2

تتطلب بعض الاختبارات أيضًا pandas.

بناء إصدار معين من علامة#

إذا كنت ترغب في بناء إصدار ثابت، يمكنك git checkout <VERSION> للحصول على التعليمات البرمجية لهذا الإصدار المحدد، أو تنزيل أرشيف مضغوط لـ الإصدار من github.

تعليمات خاصة بالمنصة#

فيما يلي تعليمات لتثبيت مترجم C/C++ عامل مع دعم OpenMP لبناء ملحقات Cython الخاصة بـ scikit-learn لكل منصة مدعومة.

Windows#

أولاً، قم بتنزيل أدوات البناء لـ Visual Studio 2019 المثبت.

قم بتشغيل ملف vs_buildtools.exe الذي تم تنزيله، أثناء التثبيت ستحتاج إلى التأكد من تحديد "تطوير سطح المكتب باستخدام C++"، على غرار لقطة الشاشة هذه:

../_images/visual-studio-build-tools-selection.png

ثانيًا، اكتشف ما إذا كنت تقوم بتشغيل Python 64 بت أو 32 بت. يعتمد أمر البناء على بنية مترجم Python. يمكنك التحقق من البنية عن طريق تشغيل ما يلي في وحدة تحكم cmd أو powershell:

python -c "import struct; print(struct.calcsize('P') * 8)"

بالنسبة لـ Python 64 بت، قم بتكوين بيئة البناء عن طريق تشغيل الأوامر التالية في cmd أو موجه أوامر Anaconda (إذا كنت تستخدم Anaconda):

SET DISTUTILS_USE_SDK=1
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64

استبدل x64 بـ x86 للبناء لـ Python 32 بت.

يرجى العلم أن المسار أعلاه قد يختلف من مستخدم لآخر. الهدف هو الإشارة إلى ملف "vcvarsall.bat" الذي سيُعيِّن متغيرات البيئة اللازمة في موجه الأوامر الحالي.

أخيرًا، قم ببناء scikit-learn باستخدام موجه الأوامر هذا:

pip install --editable . \
    --verbose --no-build-isolation \
    --config-settings editable-verbose=true

macOS#

لا يدعم مترجم C الافتراضي على macOS، Apple clang (المُلقَّب بشكل مُربِك باسم /usr/bin/gcc)، OpenMP مباشرةً. نقدم بديلين لتفعيل دعم OpenMP:

  • إما تثبيت conda-forge::compilers باستخدام conda؛

  • أو تثبيت libomp باستخدام Homebrew لتوسيع مترجم Apple clang الافتراضي.

بالنسبة لأجهزة Apple Silicon M1، من المعروف أن طريقة conda-forge أدناه فقط هي التي تعمل وقت كتابة هذا التقرير (يناير 2021). يمكنك تثبيت توزيع macos/arm64 لـ conda باستخدام مثبت miniforge

مترجمات macOS من conda-forge#

إذا كنت تستخدم مدير حزم conda (الإصدار >= 4.7)، يمكنك تثبيت حزمة تعريف compilers من قناة conda-forge، والتي توفر مترجمات C/C++ تدعم OpenMP استنادًا إلى سلسلة أدوات llvm.

قم أولاً بتثبيت أدوات سطر أوامر macOS:

xcode-select --install

يوصى باستخدام `بيئة conda`_ مخصصة لـ بناء scikit-learn من المصدر:

conda create -n sklearn-dev -c conda-forge python numpy scipy cython \
    joblib threadpoolctl pytest compilers llvm-openmp meson-python ninja

ليس من الضروري دائمًا ولكن من الأكثر أمانًا فتح موجه أوامر جديد قبل تنشيط بيئة conda المنشأة حديثًا.

conda activate sklearn-dev
make clean
pip install --editable . \
    --verbose --no-build-isolation \
    --config-settings editable-verbose=true

ملاحظة

إذا تلقيت أي رسالة خطأ تتعلق بتعارض التبعيات، فحاول التعليق على أي تكوين conda مخصص في ملف $HOME/.condarc. على وجه الخصوص، من المعروف أن التوجيه channel_priority: strict يسبب مشاكل لهذا الإعداد.

يمكنك التحقق من تثبيت المترجمات المخصصة بشكل صحيح من conda forge باستخدام الأمر التالي:

conda list

الذي يجب أن يتضمن compilers و llvm-openmp.

ستقوم حزمة تعريف المترجمات بتعيين متغيرات بيئة مخصصة تلقائيًا:

echo $CC
echo $CXX
echo $CFLAGS
echo $CXXFLAGS
echo $LDFLAGS

تشير إلى الملفات والمجلدات من بيئة conda sklearn-dev الخاصة بك (على وجه الخصوص في مجلدات bin/ و include/ و lib/ الفرعية). على سبيل المثال -L/path/to/conda/envs/sklearn-dev/lib يجب أن يظهر في LDFLAGS.

في السجل، يجب أن ترى الامتداد المترجم الذي يتم بناؤه باستخدام مترجمي clang و clang++ المثبتين بواسطة conda مع علامة سطر الأوامر -fopenmp.

مترجمات macOS من Homebrew#

هناك حل آخر وهو تمكين دعم OpenMP لمترجم clang الذي يأتي افتراضيًا على macOS.

قم أولاً بتثبيت أدوات سطر أوامر macOS:

xcode-select --install

ثبّت مدير حزم Homebrew لـ macOS.

ثبّت مكتبة LLVM OpenMP:

brew install libomp

عيِّن متغيرات البيئة التالية:

export CC=/usr/bin/clang
export CXX=/usr/bin/clang++
export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp"
export CFLAGS="$CFLAGS -I/usr/local/opt/libomp/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/opt/libomp/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/opt/libomp/lib -L/usr/local/opt/libomp/lib -lomp"

أخيرًا، قم ببناء scikit-learn في الوضع المطول (للتحقق من وجود علامة -fopenmp في أوامر المترجم):

make clean
pip install --editable . \
    --verbose --no-build-isolation \
    --config-settings editable-verbose=true

Linux#

مترجمات Linux من النظام#

يتطلب تثبيت scikit-learn من المصدر بدون استخدام conda تثبيت رؤوس تطوير Python الخاصة بـ scikit-learn ومترجم C/C++ عامل مع دعم OpenMP (عادةً سلسلة أدوات GCC).

ثبّت تبعيات البناء لأنظمة التشغيل القائمة على Debian، على سبيل المثال Ubuntu:

sudo apt-get install build-essential python3-dev python3-pip

ثم تابع كالمعتاد:

pip3 install cython
pip3 install --editable . \
    --verbose --no-build-isolation \
    --config-settings editable-verbose=true

يجب تثبيت Cython والعجلات المترجمة مسبقًا لتبعيات وقت التشغيل (numpy و scipy و joblib) تلقائيًا في $HOME/.local/lib/pythonX.Y/site-packages. بدلاً من ذلك، يمكنك تشغيل الأوامر أعلاه من virtualenv أو `بيئة conda`_ للحصول على عزل كامل عن حزم Python المثبتة عبر مدير حزم النظام. عند استخدام بيئة معزولة، يجب استبدال pip3 بـ pip في الأوامر أعلاه.

عندما لا تتوفر عجلات التبعيات المترجمة مسبقًا لبنيتك (مثل ARM)، يمكنك تثبيت إصدارات النظام:

sudo apt-get install cython3 python3-numpy python3-scipy

على Red Hat والمستنسخات (مثل CentOS)، قم بتثبيت التبعيات باستخدام:

sudo yum -y install gcc gcc-c++ python3-devel numpy scipy

مترجمات Linux من conda-forge#

بدلاً من ذلك، قم بتثبيت إصدار حديث من سلسلة أدوات مترجم GNU C (GCC) في مجلد المستخدم باستخدام conda:

conda create -n sklearn-dev -c conda-forge python numpy scipy cython \
    joblib threadpoolctl pytest compilers meson-python ninja

ليس من الضروري دائمًا ولكن من الأكثر أمانًا فتح موجه أوامر جديد قبل تنشيط بيئة conda المنشأة حديثًا.

conda activate sklearn-dev
pip install --editable . \
    --verbose --no-build-isolation \
    --config-settings editable-verbose=true

FreeBSD#

لا يتضمن مترجم clang المضمن في أنظمة FreeBSD 12.0 و 11.2 الأساسية دعم OpenMP. تحتاج إلى تثبيت مكتبة openmp من الحزم (أو المنافذ):

sudo pkg install openmp

سيؤدي ذلك إلى تثبيت ملفات الرأس في /usr/local/include والملفات lib في /usr/local/lib. نظرًا لأنه لا يتم البحث في هذه الأدلة افتراضيًا، يمكنك تعيين متغيرات البيئة لهذه المواقع:

export CFLAGS="$CFLAGS -I/usr/local/include"
export CXXFLAGS="$CXXFLAGS -I/usr/local/include"
export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/lib -L/usr/local/lib -lomp"

أخيرًا، قم ببناء الحزمة باستخدام الأمر القياسي:

pip install --editable . \
    --verbose --no-build-isolation \
    --config-settings editable-verbose=true

بالنسبة لإصدارات FreeBSD 12.1 و 11.3 القادمة، سيتم تضمين OpenMP في النظام الأساسي ولن تكون هذه الخطوات ضرورية.