سؤال

أحاول إنشاء lxml لـ Python 2.7 على جهاز يعمل بنظام Windows 64 بت.لم أتمكن من العثور على بيضة lxml لإصدار Python 2.7.لذلك أقوم بتجميعها من المصادر.أنا أتبع التعليمات الموجودة على هذا الموقع

http://lxml.de/build.html

ضمن قسم الارتباط الثابت.أنا أتلقى الخطأ

C:\Documents and Settings\Administrator\Desktop\lxmlpackage\lxml-2.2.6\lxml-2.2.
6>python setup.py bdist_wininst --static
Building lxml version 2.2.6.
NOTE: Trying to build without Cython, pre-generated 'src/lxml/lxml.etree.c' need
s to be available.
ERROR: 'xslt-config' is not recognized as an internal or external command,
operable program or batch file.

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
Building against libxml2/libxslt in one of the following directories:
  ..\libxml2-2.7.6--win32--w2k--x64\lib
  ..\libxslt-1.1.26--win32--w2k--x64--0002\lib
  ..\zlib-1.2.4--win32--w2k--x64
  ..\iconv-1.9.1--win32--w2k--x64-0001\lib
running bdist_wininst
running build
running build_py
running build_ext
building 'lxml.etree' extension
error: Unable to find vcvarsall.bat

يمكن لأي شخص أن يساعدني في ذلك؟لقد حاولت تحديد المسار للحصول على Microsoft Visual Studio..يمكنني تشغيل vcvarsall.bat من سطر الأوامر..لكن بايثون تواجه مشاكل

هل كانت مفيدة؟

المحلول

أراهن أنك لا تستخدم VS 2008 لهذا :)

هناك تعريف find_vcvarsall (الإصدار): الوظيفة (خمن ​​ماذا، إنها تبحث عن vcvarsall.bat) في distutils مع التعليق التالي

في البداية ، تحاول العثور على ProductDir of VS 2008 في السجل.إذا فشل ذلك ، فإنه يعود إلى VS90COMNTOOLS ENV VAR.

إذا كنت لا تستخدم VS 2008، فلن يكون لديك مفتاح التسجيل ولا متغير البيئة المناسب ولهذا السبب لا يمكن لـ distutils العثور على ملف vcvarsall.bat.نعم هو كذلك لا تحقق مما إذا كان يمكن الوصول إلى ملف الخفافيش من خلال متغير بيئة PATH.

الحل هو تحديد متغير VS90COMNTOOLS للإشارة إلى دليل الأدوات في Visual Studio.

ويقال أن نلقي نظرة على 11.4.distutils.msvccompiler - مترجم مايكروسوفت قسم في مستندات بايثون الذي ينص على

عادةً ما تحتاج وحدات التمديد إلى تجميعها مع نفس المترجم الذي تم استخدامه لتجميع Python.

مارتن ضد.لويس في البريد الإلكتروني بعنوان قم بتنزيل Visual Studio Express 2008 الآن في القائمة البريدية لقائمة بايثون تنص على نفس الشيء

تم تصميم كل من Python 2.6 و 2.7 و 3.1 مع هذا الإصدار (أي2008).بسبب تقليد طويل آخر ، يجب بناء وحدات تمديد Python مع نفس إصدار المترجم (بشكل أكثر تحديداً ، إصدار CRT) مثل Python نفسه.لذلك لبناء وحدات تمديد لأي من هذه الإصدارات ، تحتاج إلى الحصول على نسخة من VS 2008 أو VS 2008 Express.

في ضوء التصريحات المذكورة أعلاه لك يجب استخدم VS 2008 إذا كنت تريد إنشاء lxml لـ Python 2.7، لذا على الرغم من أن إعداد VS90COMNTOOLS يعتني بالعثور على ملف vcvarsall.bat، إلا أنه ليس كذلك ال حل.

ومع ذلك :) يحاول الأشخاص استخدام CRT الأقدم مع مترجم أحدث:
هل يمكنني استخدام برنامج التحويل البرمجي C++ الخاص بـ Visual Studio 2010 مع مكتبة وقت تشغيل C++ الخاصة بـ Visual Studio 2008؟
كيفية فرض برنامج التحويل البرمجي C++ لاستخدام إصدار CRT محدد؟
VS 2008 - رابط مقابل وقت تشغيل C الأقدم

أود أن أشكر Kev Dwyer (لإشارته إلى أهمية إصدار VS المستخدم) وستيفان بهنيل (لإرشادي إلى distutils كمكان يتعامل مع تكوين المترجم) في الموضوع مشكلة في إنشاء lxml ضمن نظام التشغيل Windows - خطأ:غير قادر على العثور على vcvarsall.bat في القائمة البريدية lxml.أود أن أشكر أيضا أجرونهولم من freenode #distutils قناة IRC للتأكد من أن distutils تحتوي على كود يبحث عن ملف vcvarsall.bat.

نصائح أخرى

بعد اتباع الحل الموصى به:

  1. جارى التحميل vcforpython27.msi من Microsoft ،
  2. تثبيته (Win7 ، Python (x ، y) 2.7.9 32bit) ،
  3. إدخال / تحديث متغير البيئة VS90COMNTOOLS إلى قيمة دليل التثبيت (C: Program Files (x86) Common Files Microsoft Visual C ++ لـ Python 9.0)

لا تزال مشكلتي موجودة (أريد بناء امتداد بيثون في ج).

اضطررت إلى القيام بالتعديلات القذرة بشكل لا يصدق ، قبل أن يعمل كل شيء الآن:

  1. تعديل "msvc9compiler.py" في "C: Python27 lib distutils"، وظيفة find_vcvarsall, ، للإشارة الآن إلى "Visual C ++ لـ Python" بدلا من "VC".
  2. انسخ مؤسس الدلائل تحت "C: Program Files (x86) Common Files Microsoft Visual C ++ لـ Python 9.0 " إلى "C: Program Files (x86) Common Files Microsoft Visual C ++ لـ Python " (أي مستوى واحد dir لأعلى).

لا أستطيع أن أقول من الذي كان يفعل شيئًا خاطئًا هنا - ربما.

تعديل. يعمل نقل الدلائل بسبب القضية الموضحة في هذا علة distutils.

حتى إذا تم تعيين VS90COMNTOOLS ، فإن MSVC9COMPILER غير قادر على العثور على vcvarsall.bat لأنه مثبت في %installdir%/vcvarsall.bat و لا %installdir%/VC/vcvarsall.bat

يتمثل الحل البديل الموصوف في استخدام موجه أوامر Visual C ++:

  1. أدخل MSVC لمطالبة أوامر Python

  2. تعيين distutils_use_sdk = 1

  3. تعيين MSSDK = 1

  4. python.exe setup.py ...

كان Jorj McKie صحيحًا تقريبًا: بالفعل التثبيت vcforpython27.msi ليس كافيًا ، ونعم هناك مشكلة في Distutils التي تمنعها من العثور على find_vcvarsall. في الواقع ، فإن القضية ليست مباشرة في Distutils ، ولكن في كيفية تعبئة Vcforpython27.msi وحيث يتم وضع vcvarsall.bat (يختلف تخطيط المجلدات عن VS2008 SDK).

حل بديل بسيط في هذه الأثناء ، ربما يتم تصحيح هذا في Python 2.7.11: استخدم setuptools بدلاً من distutils.

حلول يدوي آخر إذا كنت عالقًا مع Distutils:

1) Enter MSVC for Python command prompt
2) SET DISTUTILS_USE_SDK=1
3) SET MSSdk=1
4) you can then build your C extensions: python.exe setup.py ...

تقرير الأخطاء والحل البديل من Gregory Szorc:http://bugs.python.org/issue23246

مزيد من المعلومات والحلول لاستخدام ٪٪ Cython Magic داخل Ipython: https://github.com/cython/cython/wiki/cythonextensionsonwindows

https://github.com/develersrl/gccwinbinaries

كان لدي قضايا مماثلة. عمل هذا على الفور دون أي شيء آخر غير استخدام معالج تثبيت ووضع تفضيل واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top