<p>التثبيت غير المتكرر من خلال مشكلة التوجيهات install_requires (Trac # 1841)</p>

تم إنشاؤها على ٢٠ أكتوبر ٢٠١٢  ·  39تعليقات  ·  مصدر: numpy/numpy

_التذكرة الأصلية http://projects.scipy.org/numpy/ticket/1841 بتاريخ 2011-05-25 بواسطة مستخدم التتبع ohe ، المعين إلى مجهول.

مرحبا،

في Virtualenv ، مع python v2.7.1 ، لا يمكنني تثبيت numpy من خلال التوجيه install_requires الخاص بـ setuptools / Distribute.

from setuptools import setup
setup(...
      install_requires=['numpy'],
      ...)

يعطيني python setup.py install التتبع التالي:

running install
running bdist_egg
running egg_info
writing requirements to UNKNOWN.egg-info/requires.txt
writing UNKNOWN.egg-info/PKG-INFO
writing top-level names to UNKNOWN.egg-info/top_level.txt
writing dependency_links to UNKNOWN.egg-info/dependency_links.txt
reading manifest file 'UNKNOWN.egg-info/SOURCES.txt'
writing manifest file 'UNKNOWN.egg-info/SOURCES.txt'
installing library code to build/bdist.macosx-10.6-intel/egg
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install

creating build/bdist.macosx-10.6-intel
creating build/bdist.macosx-10.6-intel/egg
creating build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/PKG-INFO -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/SOURCES.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/dependency_links.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/requires.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
copying UNKNOWN.egg-info/top_level.txt -> build/bdist.macosx-10.6-intel/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/UNKNOWN-0.0.0-py2.7.egg' and adding 'build/bdist.macosx-10.6-intel/egg' to it
removing 'build/bdist.macosx-10.6-intel/egg' (and everything under it)
Processing UNKNOWN-0.0.0-py2.7.egg
Copying UNKNOWN-0.0.0-py2.7.egg to /Users/olivier/tc/karmatest/lib/python2.7/site-packages
Adding UNKNOWN 0.0.0 to easy-install.pth file

Installed /Users/olivier/tc/karmatest/lib/python2.7/site-packages/UNKNOWN-0.0.0-py2.7.egg
Processing dependencies for UNKNOWN==0.0.0
Searching for numpy
Reading http://pypi.python.org/simple/numpy/
Reading http://numpy.scipy.org
Reading http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103
Reading http://numeric.scipy.org
Best match: numpy 1.6.0
Downloading http://sourceforge.net/projects/numpy/files/NumPy/1.6.0/numpy-1.6.0.tar.gz/download
Processing download
Running numpy-1.6.0/setup.py -q bdist_egg --dist-dir /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/egg-dist-tmp-Zr2lMr
Running from numpy source directory.Warning: distutils distribution has been initialized, it may be too late to add a subpackage commandWarning: distutils distribution has been initialized, it may be too late to add a subpackage fcompilernon-existing path in '/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils': 'site.cfg'
Warning: distutils distribution has been initialized, it may be too late to add a subpackage distutilsWarning: distutils distribution has been initialized, it may be too late to add a subpackage testingWarning: distutils distribution has been initialized, it may be too late to add a subpackage f2pyWarning: distutils distribution has been initialized, it may be too late to add an extension _sortWarning: distutils distribution has been initialized, it may be too late to add an extension multiarrayWarning: distutils distribution has been initialized, it may be too late to add an extension umathWarning: distutils distribution has been initialized, it may be too late to add an extension scalarmathWarning: distutils distribution has been initialized, it may be too late to add an extension _dotblasWarning: distutils distribution has been initialized, it may be too late to add an extension umath_testsWarning: distutils distribution has been initialized, it may be too late to add an extension multiarray_testsWarning: distutils distribution has been initialized, it may be too late to add a subpackage coreWarning: distutils distribution has been initialized, it may be too late to add an extension _compiled_baseWarning: distutils distribution has been initialized, it may be too late to add a subpackage libWarning: distutils distribution has been initialized, it may be too late to add a subpackage oldnumericWarning: distutils distribution has been initialized, it may be too late to add an extension _capiWarning: distutils distribution has been initialized, it may be too late to add a subpackage numarrayWarning: distutils distribution has been initialized, it may be too late to add an extension fftpack_liteWarning: distutils distribution has been initialized, it may be too late to add a subpackage fftWarning: distutils distribution has been initialized, it may be too late to add an extension lapack_liteWarning: distutils distribution has been initialized, it may be too late to add a subpackage linalgWarning: distutils distribution has been initialized, it may be too late to add an extension mtrandWarning: distutils distribution has been initialized, it may be too late to add a subpackage randomWarning: distutils distribution has been initialized, it may be too late to add a subpackage maWarning: distutils distribution has been initialized, it may be too late to add a subpackage matrixlibWarning: distutils distribution has been initialized, it may be too late to add a subpackage compatWarning: distutils distribution has been initialized, it may be too late to add a subpackage polynomialWarning: distutils distribution has been initialized, it may be too late to add a subpackage docWarning: distutils distribution has been initialized, it may be too late to add a subpackage numpyCould not locate executable f95
Could not locate executable f90
Could not locate executable f77
Could not locate executable xlf90
Could not locate executable xlf
Could not locate executable ifort
Could not locate executable ifc
Could not locate executable g77
Found executable /usr/local/bin/gfortran
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1: warning: conflicting types for built-in function ‘exp’
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-//ccLgEqLk.out
_configtest.c:1:20: error: Python.h: No such file or directory
_configtest.c:1:20: error: Python.h: No such file or directory
lipo: can't figure out the architecture type of: /var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-//ccLgEqLk.out
Traceback (most recent call last):
  File "setup.py", line 4, in <module>
    install_requires=['numpy']
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/install.py", line 76, in run
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/install.py", line 104, in do_egg_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 211, in run
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 427, in easy_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 478, in install_item
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 519, in process_distribution
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 563, in resolve
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 799, in best_match
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/pkg_resources.py", line 811, in obtain
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 446, in easy_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 476, in install_item
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 655, in install_eggs
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 930, in build_and_install
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/easy_install.py", line 919, in run_setup
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 62, in run_setup
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 105, in run
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/sandbox.py", line 64, in <lambda>
  File "setup.py", line 196, in <module>

  File "setup.py", line 189, in setup_package

  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/core.py", line 186, in setup
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/Users/olivier/tc/karmatest/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg/setuptools/command/bdist_egg.py", line 167, in run
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/egg_info.py", line 8, in run
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 152, in run
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 169, in build_sources
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 328, in build_extension_sources
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/command/build_src.py", line 385, in generate_sources
  File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 410, in generate_config_h

  File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 41, in check_types

  File "/private/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/core/setup.py", line 271, in check_types

SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py:251: RuntimeWarning: Parent module 'numpy.distutils' not found while handling absolute import
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py", line 251, in clean_up_temporary_directory
ImportError: No module named numpy.distutils
Error in sys.exitfunc:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/atexit.py", line 24, in _run_exitfuncs
    func(*targs, **kargs)
  File "/var/folders/Iy/Iyse1OVUE38-IcPmyTb65E+++TI/-Tmp-/easy_install-W5KwbN/numpy-1.6.0/numpy/distutils/misc_util.py", line 251, in clean_up_temporary_directory
ImportError: No module named numpy.distutils

ليس لدي أي مشكلة في تثبيت numpy باستخدام pip install numpy أو easy_install numpy داخل أو خارج أي virtualenv.

نظام التشغيل: Mac OS 10.6.7

00 - Bug Other

التعليق الأكثر فائدة

بصفتك FYI لأي شخص يواجه هذه المشكلة ، مع أحدث إصدار من setuptools ، فإن الحل هو إضافة NumPy إلى setup_requires . ما زلت احتفظ به في install_requires ، لذا يبدو setup.py كما يلي:

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

يعمل هذا ، ولا يقوم بتثبيت NumPy إلا مرة واحدة ، على كل من نظامي التشغيل Mac OS X و Linux (لم يتم اختباره على نظام Windows).

أما لماذا ليس لدي أدنى فكرة.

ال 39 كومينتر

_ @ rgommers كتب بتاريخ 2011-05-27_

لست متأكدًا تمامًا من المشكلة ، ولكن هل يمكنك التغلب عليها بمجرد تشغيل برنامج نصي للتثبيت يقوم أولاً بتثبيت numpy ثم الحزمة الخاصة بك؟ الاعتماد على ميزات setuptools الموثقة بشكل سيئ ليس فكرة جيدة إذا كان بإمكانك تجنبها.

إذا كان عليّ التخمين ، فسأقول إن استدعاء setuptools.setup () لأول مرة يستدعي مجموعة من السحر الذي يفسد شيئًا ما من أجل numpy.distutils ، ومن هنا:

Running from numpy source directory.Warning: distutils distribution has been
initialized, it may be too late to add a subpackage commandWarning: distutils
distribution has been initialized, it may be too late to add a subpackage

يأتي هذا التحذير من distutils / misc_util.py.

_trac user ijstokes كتب في 2011-06-08_

لقد واجهت للتو نفس هذا الخطأ وبالنسبة لي يبدو أنه ناتج عن بعض مشاكل التبعية. إذا أعدت تجربة easy_install مع الوحدات الأخرى ، فإنها تعمل في المرة الثانية. أفضل تخميني هو أن بعض التبعيات "مرئية" فقط بعد انتهاء جلسة easy_install.

ايان

هل من الممكن إصلاح هذا في وقت ما؟ يؤدي هذا إلى حلول بديلة حيث يجب ألا يكون هناك IHMO. أود حقًا الوصول إلى نقطة يمكن فيها تحديد numpy في الخيار install_requires الخاص بـ setup.py.

من الممكن بالطبع ، إذا استثمر شخص ما الوقت لفهم المشكلة حقًا وقدم إصلاحًا نظيفًا. إنه ليس بريو بالنسبة لي شخصيًا - يجب تجنب استخدام imho install_requires (على الأقل حتى يتوقف pip و easy_install عن ترقية التبعيات عند ترقية الحزمة على الأقل).

هل يمكنك تأكيد أن نفس المشكلة لا تزال تحدث مع Distutils / setuptools / pip الحديثة؟

نعم هو كذلك.

مرسل من جهازي الآي باد

في 29 تشرين الثاني (نوفمبر) 2013 ، الساعة 7:22 ، كتب njsmith [email protected] :

هل يمكنك تأكيد أن نفس المشكلة لا تزال تحدث مع الحديث
distutils / setuptools / نقطة؟

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو اعرضه على
Gi tHubhttps: //github.com/numpy/numpy/issues/2434#issuecomment -29485806
.

ركضت للتو عبر هذه المشكلة حتى يمكنك تأكيد وجودها. يجب تفضيل الخيار install_requires على الاضطرار إلى كتابة نص تثبيت مخصص عندما لا تكون هناك حاجة إليه بالفعل.

نظام التشغيل: Mac 10.8.3

ضرب هذه القضية ل. لم يتوقف العرض ، لكنه بالتأكيد مزعج. خاصة لأنه ليس من الواضح بأي شكل من الأشكال أنه خطأ وليس مشكلة تتعلق بالمستخدم / البيئة.

لقد حاولت للتو إعادة إنتاج هذا عن طريق تثبيت الباندا (الذي يستخدم install_requires ) في 2.7 virtualenv تم إنشاؤها مثل:

$ virtualenv --no-site-packages nonumpy
$ source nonumpy/bin/activate
$ cd $PANDAS_DIR
$ pip install cython # needed for pandas
$ python setup.py install

إذا استطاع شخص ما إعطاء طريقة سهلة لإعادة إنتاج هذا ، فسيساعد ذلك.

لدي أيضًا هذه المشكلة في بيئة افتراضية 2.7. نظام التشغيل أوبونتو

zethraeus هل يمكنك تقديم مجموعة من الأوامر لإعادة إنتاج هذا (كما في تعليقي أعلاه)؟ من الصعب إصلاحه إذا لم نتمكن من إعادة إظهار المشكلة.

مرحبا! آسف ، لقد استغرق الأمر وقتًا طويلاً ، ولكن ها هو الناسخ.

انظر: https://gist.github.com/kejbaly2/71517b08536776399198

شكرًا على المثال @ kejbaly2 ، يمكنني إعادة إنتاجه الآن.

وجود مشكلة مشابهة جدًا لمحاولة استخدام install_requires و numpy

إليك كيفية إعادة إنتاج الخطأ في Red Hat 6.5
https://gist.github.com/necrolyte2/530e9b39dcb0259b69d4

بصفتك FYI لأي شخص يواجه هذه المشكلة ، مع أحدث إصدار من setuptools ، فإن الحل هو إضافة NumPy إلى setup_requires . ما زلت احتفظ به في install_requires ، لذا يبدو setup.py كما يلي:

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

يعمل هذا ، ولا يقوم بتثبيت NumPy إلا مرة واحدة ، على كل من نظامي التشغيل Mac OS X و Linux (لم يتم اختباره على نظام Windows).

أما لماذا ليس لدي أدنى فكرة.

لقد كنت أحاول تعقب مشكلة مماثلة يمكن أن تحدث أحيانًا عندما يتم تشغيل إصدار Numpy عن طريق setup_requires=['Numpy'] في Astropy ، عندما يتم تثبيت Astropy على أنه setup_requires من pacakge آخر (أسمي هذا "الإعداد").

لقد قمت بتتبعه وصولاً إلى هذا الجزء القديم من الكود (ولكن من حيث المبدأ لا يزال مناسبًا ، على الأقل قليلاً؟): https://github.com/numpy/numpy/blob/9fc077332b34a7b2a90126f5ae6cc50d57162db5/numpy/distutils/core.py#L92

في معظم الحالات عند تشغيل setup.py لـ Numpy ، فإنها تدفع دالة تسمى configuration في kwargs مقابل numpy.distutils.core.setup . numpy.distutils.core.setup بدوره بإيقاف المفتاح 'configuration' من كوارغ الإعداد ، ثم يقوم بإعداد بعض المتغيرات العالمية "السحرية" في distutils.core ، ثم استدعاء _itself_ بشكل متكرر . الغرض من هذا الاستدعاء العودي هو استخدام آلية distutils لفحص وسيطات سطر الأوامر للأخطاء / - help.

ثم تستدعي الوظيفة configuration التي تبدأ عملية تكوين جميع الحزم الفرعية Numpy ، قبل معاودة الاتصال مرة أخرى بوظيفة distutils setup() مع تكوين جميع الحزم بالكامل الآن.

حيث يتعارض كل هذا مع أن المدير Configuration يحتاج أحيانًا إلى استدعاء الأداة المساعدة get_distribution أجل إرفاق الأشياء بالكائن Distribution . الحاجة إلى هذا قابلة للنقاش. في الواقع ، بينما توجد بعض أجزاء الكود في Configuration تعتقد أنه يجب أن يكون قادرًا على القيام بذلك ، هناك أجزاء أخرى تعتقد أنه إذا كان هناك بالفعل مثيل Distribution مرتبط بـ distutils.core._setup_distribution فربما يكون هناك خطأ ما (ومن هنا تم تهيئة توزيع التوزيعات ، فقد يكون الوقت قد فات لإضافة حزمة فرعية "التحذيرات التي أبلغ عنها بعض الأشخاص في هذا الموضوع).

للنسخ الاحتياطي قليلاً ونأمل أن توضح - عند تشغيل الوظيفة setup() من التوزيعات (أو setuptools) ، فإنها تقوم بتهيئة كائن Distribution من setup() kwargs ، ثم يعين الناتج Distribution للمتغير العام distutils.core._setup_distribution . لا يقوم في أي وقت بتنظيف هذا المتغير لأنه يفترض أن الإعداد _only_ هو الذي سيتم تشغيله في مترجم Python الحالي. لم يتم تصميمه للإعداد. (تتغلب النقطة على هذا والمشكلات المماثلة عند تثبيت حزم متعددة عن طريق تثبيت كل حزمة من العملية الفرعية الخاصة بها). ومع ذلك ، في حالات أخرى ، مثل setup_requires ، يمكن أن يكون هناك بالفعل مثيل Distribution من الحزمة الجذرية في distutils.core._setup_distribution . لذلك عندما تحاول فئة Numpy Configuration إرفاق أشياء بالعنصر Distribution لـ _ Numpy نفسه_ يمكن أن ينتهي الأمر بالعبث مع Distribution الخطأ في بعض الحالات. ينتج عن هذا بنية Numpy مشوهة لأن بعض البتات مفقودة.

هناك عدد من الحلول الممكنة لهذا ، من نهاية setuptools و / أو نهاية Numpy. لم أقرر ما هو أفضل نهج ، لكن الأمر برمته هو بالتأكيد فوضى :)

بالنسبة لما يستحق ، سيكون أحد الحلول الممكنة من طرف setuptools هو setuptools.sandbox.run_setup ، الوظيفة التي يستخدمها setuptools لتحقيق الإعداد ، لحفظ / استعادة جميع المتغيرات العالمية distutils.core قبل / بعد تشغيل الإعداد النصي في السؤال.

كما يحدث ، أعتقد أن الإصدار الحالي من setuptools قد يصلح ذلك بالفعل عن طريق إخفاء distutils.core الأصلي (إزالته من sys.modules ) قبل استدعاء البرنامج النصي setup.py الفرعي. ذاك يجب ان يعتني به. لكنني لم أتحقق من هذا مرة أخرى.

تحديث: تم التأكيد ، تم حل المشكلة التي وصفتها أعلاه (إلى حد ما عن طريق الصدفة السعيدة) في setuptools> = 10.0.

embray هذا جزء لطيف من عمل المباحث! (ويؤلم رأسي قليلاً :))

أنت محق في أن easy_install - وبالتالي get_distribution() أفترض - لا يزال وثيق الصلة بما يكفي بحيث لا ينبغي لنا كسره.

rgommers الشيء هو ، هذا الحل البديل لـ easy_install تمت إضافته منذ وقت طويل جدًا ، ولا أعتقد أنه ضروري تمامًا بعد الآن (ليس فقط لحقيقة أن easy_install نفسه مهمل بشكل فعال ، على الرغم من أنني أعلم أنه لا يزال هناك حفنة من الأسباب الوجيهة لاستخدام الناس). سأرى ما إذا كان بإمكاني التوصل إلى تصحيح يعالج المشكلة الأصلية بينما لا يمثل مشكلة في سياقات أخرى.

embray تبدو جيدة. إذا حصلت على التصحيح جاهزًا ولم تتم مراجعته في غضون أسبوعين تقريبًا ، فيرجى ركلني (برفق)

setup_requires = ["numpy"] لم يعمل معي. تلقيت رسالة الخطأ هذه:

AttributeError: كائن "الوحدة النمطية" ليس له سمة "get_include".

لكن تشغيل "python setup.py install" مرة ثانية أدى إلى حل المشكلة. راجع أيضًا http://stackoverflow.com/questions/21605927/why-doesnt-setup-requires-work-properly-for-numpy

لقد واجهت للتو المشكلة التي أبلغت عنهاasmaier.

لما يستحق الأمر ، لم أنس أبدًا أفكاري لإصلاح هذه المشكلة ، ولكن كان علي التركيز على أشياء أخرى الآن. إذا أراد أي شخص آخر أن يأخذ طعنة في ذلك ، فقد قدمت بعض التوصيات عالية المستوى حول المكان الذي قد يبحثون فيه ، وبعض التعليقات من هنا.

لذلك ، ترجع هذه المشكلة إلى حقيقة أنه تم تعيين __builtins__.__NUMPY_SETUP__ = True
وعندما تقوم بتثبيت تبعية تحتاج إلى numpy كاعتماد ، فإن __NUMPY_SETUP__ لا يتم إعادة ضبطه بواسطة setuptools.
يبدو أنك تحاول تعيين __NUMPY_SETUP__ = False هنا
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
لكن هذا الكود لم يصل ابدا لان العائد على السطر السابق ...

في الواقع ، أعتقد أن وظيفة isbootstrapping بأكملها تسيء استخدام / تسيء استخدام __builtins__ هنا ، بطريقة تتعطل عندما يكون لديك numpy كإعتمادية ، ولديك تبعية غير معقدة مثل التبعية.

JensTimmerman أظن أن هذا مرتبط أيضًا بـ https://github.com/matplotlib/matplotlib/issues/6928 ،

نرحب بأي اقتراحات بالطريقة الصحيحة لإصلاح ذلك.

rgommers الأفكار؟

يبدو أنك تحاول تعيين NUMPY_SETUP = خطأ هنا
https://github.com/numpy/numpy/blob/055056a3108ab19883e50ac125ab9974823498c7/numpy/distutils/misc_util.py#L2195
لكن هذا الكود لم يصل ابدا لان العائد على السطر السابق ...

لا يتم استخدام هذه الوظيفة is_bootstrapping أي مكان تبدو عليه ، لذا فهي غير ذات صلة.

في الواقع ، أعتقد أن وظيفة isbootstrapping بأكملها تسيء استخدام / تسيء استخدام البنايات هنا ، بطريقة تتعطل عندما يكون لديك numpy كاعتمادية ، ولديك تبعية بها numpy كتبعية.

الاستخدام الوحيد لـ __builtins__ هو في setup.py هنا .

إنه قبيح ، لكن من الصعب أيضًا كتابة ذلك بطريقة أكثر صرامة. تخميني في الوقت الحالي هو أنه إذا كانت هناك مشكلة في هذا ، فلن يظهر إلا مقابل setup_requires='numpy' بعض الظروف وليس مع install_requires . الفرق بينهما هو أن السابق يستدعي setuptools لأن pip لا يعرف بعد كيفية التعامل معه. في Scipy ، نستخدم setup_requires='numpy' الرغم من ذلك ، ولم نواجه مشكلة في هذا مطلقًا. لذلك قد يكون ذلك بالإضافة إلى المرح في نصوص إعداد matplotlib.

القراءة مرة أخرى من خلال https://github.com/numpy/numpy/issues/2434#issuecomment -77898051 ، التي يبدو أنها تصف سبب المشكلة جيدًا ، لا أعتقد أن لها علاقة بـ __NUMPY_SETUP__ .

تحرير: أو ربما يحدث في بعض الحالات ، لكن من الصعب التعامل معها بطريقة أخرى. عادةً لا توجد مشكلة هنا لأن pip يدير إنشاء / تثبيت الأشياء بطريقة معزولة جيدًا.

لا ينبغي أن يكون من الصعب للغاية إثبات صحة هذه النظرية أو خطأها ، باستخدام del builtins.__NUMPY_SETUP__ في نهاية setup.py .

أعطى تلك المحاولة في gh-7956

فقط في حالة اختفاء جوهر https://github.com/numpy/numpy/issues/2434#issuecomment -49156521 في وقت ما ، فإليك نسخة من كيفية إعادة إظهار هذه المشكلة:

cd /tmp

cat > ./setup.py <<DELIM
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: "Chris Ward" <[email protected]>

from setuptools import setup

default_setup = dict(
    name='numpy_install_test',
    description='https://github.com/numpy/numpy/issues/2434',
    provides=['numpy_install_test'],
    install_requires=['pandas'],
    requires=['pandas'],
    license='GPLv3',
    author='Chris Ward',
    author_email='[email protected]',
)   

setup(**default_setup)

DELIM


virtualenv --no-site-packages ~/virtenvs/nonumpy
source ~/virtenvs/nonumpy/bin/activate
python setup.py install

تواجه صعوبة في تثبيت الباندا في python2.7.16 باستخدام pip install -R requirements.txt

https://files.pythonhosted.org/packages/b2/4c/b6f966ac91c5670ba4ef0b0b5613b5379e3c7abdfad4e7b89a87d73bae13/pandas-0.24.2.tar.gz (11.8 ميغابايت)
الإخراج الكامل من الأمر python setup.py egg_info:
Traceback (أحدث مكالمة أخيرة):
ملف ""، السطر 1 ، في
ملف "/tmp/pip-install-WznqHc/pandas/setup.py" ، السطر 746 ، في
setuptools_kwargs)ملف "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py" ، السطر 144 ، في الإعداد_install_setup_requires (Attrs)ملف "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py" ، السطر 139 ، في _install_setup_requiresdist.fetch_build_eggs (dist.setup_requires)ملف "/usr/local/lib/python2.7/site-packages/setuptools/dist.py" ، السطر 724 ، في fetch_build_eggsreplace_conflicting = صحيح ،ملف "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py" ، السطر 782 ، قيد الحلreplace_conflicting = replace_conflictingملف "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py" ، السطر 1065 ، في best_matchإرجاع self.obtain (مطلوب ، مثبت)ملف "/usr/local/lib/python2.7/site-packages/pkg_resources/__init__.py" ، السطر 1077 ، قيد الحصولمُثبت الإرجاع (متطلب)ملف "/usr/local/lib/python2.7/site-packages/setuptools/dist.py" ، السطر 791 ، في fetch_build_eggإرجاع cmd.easy_install (مطلوب)ملف "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py" ، السطر 679 ، في easy_installreturn self.install_item (spec ، dist.location ، tmpdir ، deps)ملف "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py" ، السطر 705 ، في install_itemdists = self.install_eggs (المواصفات ، التنزيل ، tmpdir)ملف "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py" ، السطر 890 ، في install_eggsإرجاع self.build_and_install (setup_script ، setup_base)ملف "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py" ، السطر 1158 ، في build_and_installself.run_setup (setup_script ، setup_base ، args)ملف "/usr/local/lib/python2.7/site-packages/setuptools/command/easy_install.py" ، السطر 1144 ، في run_setuprun_setup (setup_script، args)ملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 253 ، في run_setupرفعملف "/usr/local/lib/python2.7/contextlib.py" ، السطر 35 ، في __exit__self.gen.throw (النوع ، القيمة ، التتبع)ملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 195 ، في setup_contextيخضع أو يستسلمملف "/usr/local/lib/python2.7/contextlib.py" ، السطر 35 ، في __exit__self.gen.throw (النوع ، القيمة ، التتبع)ملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 166 ، في save_modulessave_exc.resume ()ملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 141 ، في استئنافsix.reraise (type ، exc ، self._tb)ملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 154 ، في save_modulesحفظ العائدملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 195 ، في setup_contextيخضع أو يستسلمملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 250 ، في run_setup_execfile (setup_script، ns)ملف "/usr/local/lib/python2.7/site-packages/setuptools/sandbox.py" ، السطر 45 ، في _execfileexec (كود ، جلوبال ، سكان محليون)** ملف "/tmp/easy_install-2M8B7z/numpy-1.17.0rc1/setup.py" ، السطر 31 ، في

**RuntimeError: Python version >= 3.5 required.**

لست متأكدًا من سبب البحث عن numpy-1.17.0rc1 الذي لا يدعم python2

سيكون موضع تقدير أي مساعدة ، شكرا

يرجى مشاركة requirements.txt

يحتوي ملف المتطلبات على:

قارورة == 1.0.2
flask-jwt == 0.3.2
نص القارورة == 2.0.6
قارورة سكريبت == 0.1.3.6
PyJWT <1.5.0
وميض == 1.4
أرقام الهاتف == 8.9.12
الإصدار == ​​0.9.0
bugsnag == 3.4.3
مخلل == 0.7.2
الطلبات == 2.19.1
بيثون داتوتيل == 2.8.0
غونيكورن == 19.9.0
gevent == 1.3.6
webargs == 4.0.0
رقائق == 3.10
بسون == 0.5.7
الكرفس == 4.2.1
redis == 3.2.1
hiredis
numpy == 1.16.4

أخيرًا ، قم بإدارته للعمل على الاحتفاظ بملف المتطلبات الداخلية غير المفككة ثم تثبيت الباندا لاحقًا

قم بتشغيل الأمر في Docker:

تثبيت نقطة RUN https://github.com/pydata/pandas/releases/download/v0.24.2/pandas-0.24.2.tar.gz

ومع ذلك ، هناك الآن مشكلة أخرى في التجميع ، لنفترض أنك بحاجة إلى تثبيت cython لتجميع الباندا.

خطأ:

استثناء: الملف الذي تم إنشاؤه بواسطة Cython "pandas / io / sas / sas.c" غير موجود.
مطلوب Cython لتجميع الباندا من فرع التنمية.
الرجاء تثبيت Cython أو تنزيل حزمة إصدار من الباندا.

اي فكرة؟

ليست مرتبطة بهذه المشكلة التي تتعلق باستخدام install_requires داخل setup.py . الرجاء فتح قضية جديدة. هل تحتاج حقًا إلى تثبيت الباندا من المصدر؟ لماذا ليس pip install pandas==0.24.2 ؟

نعم سأفتح هذا العدد في مكتبة الباندا. ومع ذلك ، فإن المنشور الذي ذكرته سابقًا والمتعلق بـ numPy نظرًا لأنه لا يمكنك تثبيت الباندا مباشرة numPy مثبت بشكل صحيح على Python2.7 ضمن بيئة عامل ميناء.
لماذا لا يتم تثبيت Pip Pandas == 0.24.2؟ لأنه عندما أقوم بتشغيله تحت عامل الميناء ، فإنه يقول.

استثناء: الملف الذي تم إنشاؤه بواسطة Cython "pandas / msgpack.c" غير موجود.
مطلوب Cython لتجميع الباندا من فرع التنمية.
الرجاء تثبيت Cython أو تنزيل حزمة إصدار من الباندا.

لذلك أحتاج إلى استخدام نسخة الإصدار من الباندا ليتم تثبيتها من tarball

إغلاق. أعتقد أن عالم الثعبان يتحرك بعيدًا عن setup_requires وأكثر نحو requirements.txt أو pyproject.toml . الحل البديل أدناه لأولئك الذين ما زالوا يرغبون في استخدام setup_requires .

setup(
...
    setup_requires=["numpy"],
    install_requires=["numpy"],
)

بالنسبة إلى omeryounus الذي يحاول تثبيت numpy على python2 ، فهذه مشكلة منفصلة غير مرتبطة بهذه المشكلة. أبلغ بعض المستخدمين أن ترقية pip و setuptools إلى أحدث إصدار ساعد في حل هذه المشكلة.

يرجى إعادة الفتح إذا كان هناك المزيد للمناقشة حول setup_requires .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

perezpaya picture perezpaya  ·  4تعليقات

dcsaba89 picture dcsaba89  ·  3تعليقات

dmvianna picture dmvianna  ·  4تعليقات

keithbriggs picture keithbriggs  ·  3تعليقات

astrofrog picture astrofrog  ·  4تعليقات