Pipenv: 2018.11.26: ينبعث pipenv من أخطاء pythons عند إنشاء Virtualenv

تم إنشاؤها على ٦ ديسمبر ٢٠١٨  ·  30تعليقات  ·  مصدر: pypa/pipenv

وصف المشكلة

من المحتمل أن يكون مرتبطًا بـ # 3229 ، يستمر pipenv في إلقاء الأخطاء عند إنشاء Virtualenv:

$ pipenv --three
['Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess\n    combine_stderr=combine_stderr)\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess\n    return subprocess.Popen(cmd, **options)\n', '  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__\n    restore_signals, start_new_session)\n', '  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 1344, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\n', "FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/pythonz': '/usr/local/bin/pythonz'\n", '\nDuring handling of the above exception, another exception occurred:\n\n', 'Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/contextmanagers.py", line 150, in spinner\n    yield _spinner\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run\n    write_to_stdout=True\n', '  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess\n    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))\n', 'TypeError: write() takes exactly one argument (3 given)\n']
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess
    combine_stderr=combine_stderr)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess
    return subprocess.Popen(cmd, **options)
  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/subprocess.py", line 1344, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/bin/pythonz': '/usr/local/bin/pythonz'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/pipenv", line 11, in <module>
    sys.exit(cli())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 1114, in invoke
    return Command.invoke(self, ctx)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/pipenv/cli/command.py", line 208, in cli
    clear=state.clear,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 574, in ensure_project
    pypi_mirror=pypi_mirror,
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 516, in ensure_virtualenv
    ensure_python(three=three, python=python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 397, in ensure_python
    path_to_python = find_a_system_python(python)
  File "/usr/local/lib/python3.6/site-packages/pipenv/core.py", line 360, in find_a_system_python
    python_entry = finder.find_python_version(line)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/pythonfinder.py", line 114, in find_python_version
    major=major, minor=minor, patch=patch, pre=pre, dev=dev, arch=arch, name=name
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 396, in find_python_version
    ver = next(iter(self.get_pythons(sub_finder)), None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 279, in get_pythons
    reverse=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 277, in <genexpr>
    (p for p in self._filter_paths(finder) if p.is_python),
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 264, in <genexpr>
    pth for pth in unnest(finder(p) for p in self.path_entries if p is not None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 251, in unnest
    for el in target:
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 264, in <genexpr>
    pth for pth in unnest(finder(p) for p in self.path_entries if p is not None)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/mixins.py", line 121, in find_python_version
    for child in unnest(self.pythons.values())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 531, in pythons
    for path, entry in self.children.items():
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/cached_property.py", line 35, in __get__
    value = obj.__dict__[self.func.__name__] = self.func(obj)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 501, in children
    for child_key, child_val in self._gen_children():
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 493, in _gen_children
    entry = PathEntry.create(path=child, **pass_args)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 575, in create
    _new = cls(**creation_args)
  File "<attrs generated init b90d7581ea07925e94241736776cf96c889eb52c>", line 16, in __init__
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/path.py", line 518, in get_py_version
    py_version = PythonVersion.from_path(path=self, name=self.name)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/models/python.py", line 395, in from_path
    py_version = get_python_version(path.path.absolute().as_posix())
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 68, in get_python_version
    combine_stderr=False, write_to_stdout=False)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run
    write_to_stdout=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess
    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))
TypeError: write() takes exactly one argument (3 given)

نتيجة متوقعة

لم يتوقع أي تسجيل خطأ أثناء إنشاء Virtualenv.

نتيجة فعلية

فشل إنشاء virtualenv.

خطوات التكرار

$ pipenv --three

pipenv --support يرسل أيضًا هذه الأخطاء ويفشل في جمع معلومات الدعم!

Type Regression Release Blocker Vendored Dependencies

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

الإصدار الحالي بالتأكيد يبدو لي. كان الحل المؤقت الآخر الذي رأيته في إصدار سابق هو المرور على وجه التحديد في مسار python كما يلي:

pipenv --three --python=`which python3`

لقد كنت أفعل هذا بنجاح في الوقت الحالي: التكشير:

ال 30 كومينتر

يبدو أن المسار /usr/local/bin/pythonz لم يعد صالحًا.

همم. هل كان يجب أن يكون؟ لم أستخدم البايثونز مباشرة. اعتقدت أنها كانت مجرد تبعية لـ pipenv تمكنت من إدارتها عندما قمت بتثبيت pipenv.

بالنسبة للركلات ، قمت للتو بإلغاء تثبيت وإعادة تثبيت pipenv 2018.11.26 وما زلت أواجه المشكلة.

هل يمكنك توفير الناتج من pipenv --support ؟ وللتأكيد ، لا ينبغي أن يكون

يا nvm فقط رأيت رسالتك. أريد فقط أن أؤكد أنه لا توجد نسخة شريرة من pipenv على طريقك في مكان ما. يمكنك التحقق من which pipenv و python -m pipenv --version

$ which pipenv
/usr/local/bin/pipenv

أعاد python -m pipenv --version No module named pipenv لأنني قمت بتثبيت Python 2 و Python 3 عبر Homebrew ، و python بتشغيل Python 2.7. بناءً على توصية سابقة هنا ، لقد قمت بتثبيت pipenv تحت Python 3. لذلك قمت باستبدال python3 وحصلت على:

$ python3 -m pipenv --version
pipenv, version 2018.11.26

شكر!

آه طيب. ونعم الخطأ منطقي. سأضع علامة عليه فقط وأتأكد من إصلاحه

أي كلمة عن موعد إصدار الإصلاح لهذا؟ أواجه هذه المشكلة لأنها تمنعني من تثبيت متطلبات pipenv. لقد جربت حلcommandtab بدون مثل هذا الحظ.

لا يمكنني الحصول على pipenv للعمل على الإطلاق مع الإصدار الحالي.

$ which pipenv
/Users/josh/.pyenv/shims/pipenv

$ python -m pipenv --version
pipenv, version 2018.11.26

حاولت التثبيت باستخدام python3.7 من البيرة ، ونفس المشكلة.

يبدو أنه ليس هناك حاجة ملحة هنا ، أو أنها ليست مشكلة كبيرة. هل أفتقد شيئًا ما ، أم أن pipenv معطل تمامًا بالإصدار الحالي؟

الإصدار الحالي بالتأكيد يبدو لي. كان الحل المؤقت الآخر الذي رأيته في إصدار سابق هو المرور على وجه التحديد في مسار python كما يلي:

pipenv --three --python=`which python3`

لقد كنت أفعل هذا بنجاح في الوقت الحالي: التكشير:

لم يكن هذا الحل يعمل بالنسبة لي. اضطررت إلى الرجوع إلى إصدار سابق إلى 2018.10.13 ثم استخدام الحل البديل في هذا الموضوع :

pipenv install -d --python=$HOME/.pyenv/versions/3.7.1/bin/python

بقدر ما أستطيع أن أقول ، لقد تم كسر pipenv بالكامل منذ أكتوبر.

techalchemy أي كلمة حول إصلاح علامة المنبع؟ لا يزال إنشاء pipenv virtualenv يتطلب حلولاً بديلة للاستدعاء.

شكرا ❤️

كان هذا صعبًا بعض الشيء مع جميع الإصلاحات الأخرى التي يجب أن يتم دمجها ولكن أعتقد أن CI سوف يمر الآن وسيتم إصلاح هذا بالرقم 3330 - آسف على المشكلة

آه طيب. ونعم الخطأ منطقي. سأضع علامة عليه فقط وأتأكد من إصلاحه

لا تزال المشكلة قائمة ، أي فكرة عن موعد إصدار هذا الإصلاح.

نفس المشكلة هنا.

يمكن تأكيد @ command-tab لا يزال الحل البديل يعمل.

لا يزال هذا يحدث بالتأكيد مع البيرة المنزلية pipenv و python ... نوع من المفاجأة أنه لا يوجد اختبار لتغطيتها لمعرفة المدة التي مرت على هذه المشكلة ...

يمكنني أيضًا أن أؤكد أن هذه المشكلة لا تزال تحدث ، على الرغم من إغلاق مشكلة GitHub هذه.

هل يحتاج القائمون على الصيانة إلى إصدار عدد جديد؟

نفس المشكلة مع Ubuntu 18 LTS المثبت في نظام Windows الفرعي لنظام Linux.

الحل يعمل بالنسبة لي.

techalchemy يبدو أن هذه المشكلة لا تزال موجودة. هل يمكنك إعادة فتحه أو توضيح أنك تريد إنشاء عدد جديد؟

شكر.

نفس المشكلة مع Ubuntu 18 LTS المثبت في نظام Windows الفرعي لنظام Linux.

كذلك هنا

techalchemy يرجى إلقاء نظرة مرة أخرى

نفس المشكلة هنا على macOs Mojave و python 3.7

أنا أيضا:

  • كاتالينا
  • بايثون 3.7.1

كل شيء يعمل بشكل جيد بمجرد أن أعلق على هذا السطر في ملف Pipfile الخاص بي:

[requires]

#python_version = "3.7.4"

أنا أيضا:

  • كاتالينا
  • بايثون 3.7.1

كل شيء يعمل بشكل جيد بمجرد أن أعلق على هذا السطر في ملف Pipfile الخاص بي:

[requires]

#python_version = "3.7.4"

آه ، لقد نجح هذا معي ، شكرًا لك!

تضمين التغريدة
لقد نجح هذا أيضًا بالنسبة لي على WSL في VSCode (لم أجرب غلافًا خارجيًا لأنه كان يعمل بشكل جيد لمشروع مختلف).

@ علامة تبويب الأوامر
إضافة "- python = which python3 " نجحت أيضًا. لم أحاول إضافة "- ثلاثة" ويبدو أنه ليس ضروريًا لحالة / إصدار الاستخدام الخاص بي.

بعد الحصول على كلا الحلين وتمكنت من تشغيله ، قمت بإزالتهما وحاولت مرة ثالثة التأكد من أن البيئة لا تزال تسبب مشكلة (الراوي: لقد كان).

تضمين التغريدة
أعتقد أن هذا قد لا يكون "ثابتًا بالكامل" في 3330؟ يمكن أن تكون مشكلة عرضية تسبب نفس الأعراض. في حالتي ، أستخدم WSL وأتساءل عما إذا كان وجود 'python3' و 'python3.exe' في مسار WSL يبدو مريبًا.

هل تعتقد أنه من الأفضل أن أقوم بفتح مشكلة جديدة ، هل تريد مني إجراء عمليات تشخيص إضافية ، أو أي شيء آخر؟

أنا أستخدم wsl2 مع arclinux (manjaro)
يبدو أن pipenv يستدعي python في نوافذ host env للتثبيت
لذلك نحتاج إلى تحديد مكان العثور على الثعبان باستخدام:
pipenv --python=<PATH_TO_PYTHON>
أو
pipenv --python=which python3

يعمل لدي.

يمكن تأكيد حدوث ذلك بموجب WSL مع Ubuntu 18.04 LTS. يبدو أن pipenv يبحث عن مترجم لغة Python بدلاً من استخدام المترجم الذي يتم تنفيذه بموجبه ، والقيام بذلك هو اجتياز PATH بترتيب عكسي. لدي العديد من بيئات Python المثبتة ، وكلما قمت بإزالة واحدة يدويًا من PATH ، سيجد pipenv بيئة مختلفة ويشكو من ذلك بدلاً من ذلك.

أرى نفس المشكلة ضمن WSL مع Ubuntu 18.04 LTS. pipenv install --python $(which python3) ولكن عندما أعمل في وقت لاحق pipenv shell ، لا يمكنه العثور على التبعيات التي كان يجب تنزيلها.

أنا أيضًا متأثر باستخدام WSL 1 و Ubuntu 18.04. الحل البديل --python $(which python) يعمل.

سبب الجزء الأخير من الاستثناء ، أي هذا الجزء:

  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/pythonfinder/utils.py", line 68, in get_python_version
    combine_stderr=False, write_to_stdout=False)
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 314, in run
    write_to_stdout=True
  File "/usr/local/lib/python3.6/site-packages/pipenv/vendor/vistir/misc.py", line 162, in _create_subprocess
    sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))
TypeError: write() takes exactly one argument (3 given)

... بسبب وجود خطأ في الاستدعاء لطباعة خطأ عند معالجة الاستثناء الأول. يبدو أن هذا الخطأ قد تم إصلاحه بالفعل في الإصدار الرئيسي في يناير 2019 - https://github.com/pypa/pipenv/commit/574fe7308d9ac81d64da954722f35c9eee0dd467#diff -a59595db75020aeb9f688d6a0b4818e6L162. ولكن نظرًا لأن أحدث إصدار من pipenv هو 2018.11.26 ، أتصور أن معظمهم ليس لديهم إصدار ثابت.

يمكن للمرء تصحيحه يدويًا. افتح /usr/local/lib/<your-python-version>/site-packages/pipenv/vendor/vistir/misc.py ، وانتقل إلى السطر 162 ، وقم بتغيير هذا:

sys.stderr.write("Error %s while executing command %s", exc, " ".join(cmd._parts))

... الى هذا:

sys.stderr.write(f"Error {exc} while executing command " + " ".join(cmd._parts))

ستحصل الآن على تقرير استثناء أكثر دقة. في حالتي ، فإن المشكلة تتعلق بـ pipenv المستندة إلى WSL Linux التي تكتشف تثبيت Python المستندة إلى Windows وتواجه مشكلة في تشغيلها ، وهو أمر واضح نوعًا ما:

Error [Errno 8] Exec format error: '/mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe' while executing command /mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe -c import sys; print(['Traceback (most recent call last):\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/contextmanagers.py", line 150, in spinner\n    yield _spinner\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 314, in run\n    write_to_stdout=True\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 160, in _create_subprocess\n    combine_stderr=combine_stderr)\n', '  File "/usr/local/lib/python3.6/dist-packages/pipenv/vendor/vistir/misc.py", line 134, in _spawn_subprocess\n    return subprocess.Popen(cmd, **options)\n', '  File "/usr/lib/python3.6/subprocess.py", line 729, in __init__\n    restore_signals, start_new_session)\n', '  File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child\n    raise child_exception_type(errno_num, err_msg, err_filename)\n', "OSError: [Errno 8] Exec format error: '/mnt/c/Users/<user>/AppData/Local/Microsoft/WindowsApps/python3.exe'\n"]

بالنسبة لمستخدمي WSL ، أعتقد أنه يمكن التخفيف من المشكلة من خلال التأكد من أن أي متطلبات على إصدار Python الخاص بك في Pipfile مطابقة _تطابقًا _ تمامًا_ مع تثبيت Python المستند إلى Linux ، على سبيل المثال

[requires]
python_version = "3.6.8"  # Make sure this exactly matches an installed version, or remove it.

أتمنى أن يساعدك هذا.

لست متأكدًا من مقدار المساعدة التي يقدمها هذا ، ولكن حذف ملف Pipfile وتشغيل pipenv lock ، ثم إعادة محتويات ملف Pipfile القديم وتشغيل pipenv install يعمل معي بشكل دائم.

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