Virtualenv: دعم Microsoft store Python

تم إنشاؤها على ٢ يونيو ٢٠١٩  ·  26تعليقات  ·  مصدر: pypa/virtualenv

  1. قم بتثبيت Python 3.7 من متجر Microsoft
  2. الحصول على خطأ عند محاولة إنشاء virtualenv جديدة
Microsoft Windows [Version 10.0.18908.1000]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\jodox>mkdir \temp\example

C:\Users\jodox>cd \temp\example

C:\temp\example>virtualenv .virtualenv
Using base prefix 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0'
New python executable in C:\temp\example\.virtualenv\Scripts\python.exe
Command C:\temp\example\.vir...v\Scripts\python.exe -m pip config list had error code 1
Installing setuptools, pip, wheel...

  Complete output from command C:\temp\example\.vir...v\Scripts\python.exe - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_internal\__init__.py", line 19, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\__init__.py", line 8, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\connectionpool.py", line 7, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: DLL load failed: Access is denied.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 13, in <module>
ImportError: cannot import name 'main' from 'pip' (C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\__init__.py)
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts\virtualenv.exe\__main__.py", line 9, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 831, in main
    symlink=options.symlink,
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1123, in create_environment
    install_wheel(to_install, py_executable, search_dirs, download=download)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 973, in install_wheel
    _install_wheel_with_search_dir(download, project_names, py_executable, search_dirs)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1060, in _install_wheel_with_search_dir
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=script)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 924, in call_subprocess
    raise OSError("Command {} failed with error code {}".format(cmd_desc, proc.returncode))
OSError: Command C:\temp\example\.vir...v\Scripts\python.exe - setuptools pip wheel failed with error code 1

C:\temp\example>pip list
Package          Version
---------------- ----------
certifi          2019.3.9
pipenv           2018.11.26
virtualenv       16.6.0
virtualenv-clone 0.5.3

C:\temp\example>
enhancement

ال 26 كومينتر

zooba هذا يبدو وكأنه تغليف سيء على جانب متجر Windows 🤔؟

gaborbernat أعتقد وجود خطأ في virtualenv ، لأن وحدة venv تعمل بشكل جيد

Microsoft Windows [Version 10.0.18908.1000]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\jodox>cd \temp\example

(.venv) C:\temp\example>python3 -m venv .venv

C:\temp\example>.\.venv\Scripts\activate.bat

(.venv) C:\temp\example>python -V
Python 3.7.3

(.venv) C:\temp\example>python -c "import sys;print(sys.executable)"
C:\temp\example\.venv\Scripts\python.exe

(.venv) C:\temp\example>python -c "import socket"

(.venv) C:\temp\example>

ليس حقا رجل. تقوم venv بتزويد venv الذي تم إنشاؤه بكل ما لديك من مجموعات. فشل استيراد مكدس الشبكة هنا (وهو ما يفعله Virtualenv لتثبيت أحدث أدوات النقطة / الإعداد). قم بتمرير ملف - no-download و virtualenv يجب أن يعمل أيضًا.

gaborbernat لا أريد virtualenv ، لكن pipenv يستخدمه وليس لدي خيار لتمرير Args

C:\temp\example>pipenv --help
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where             Output project home information.
  --venv              Output virtualenv information.
  --py                Output Python interpreter information.
  --envs              Output Environment Variable options.
  --rm                Remove the virtualenv.
  --bare              Minimal output.
  --completion        Output completion (to be eval'd).
  --man               Display manpage.
  --support           Output diagnostic information for use in GitHub issues.
  --site-packages     Enable site-packages for the virtualenv.  [env var:
                      PIPENV_SITE_PACKAGES]
  --python TEXT       Specify which version of Python virtualenv should use.
  --three / --two     Use Python 3/2 when creating virtualenv.
  --clear             Clears caches (pipenv, pip, and pip-tools).  [env var:
                      PIPENV_CLEAR]
  -v, --verbose       Verbose mode.
  --pypi-mirror TEXT  Specify a PyPI mirror.
  --version           Show the version and exit.
  -h, --help          Show this message and exit.


Usage Examples:
   Create a new project using Python 3.7, specifically:
   $ pipenv --python 3.7

   Remove project virtualenv (inferred from current directory):
   $ pipenv --rm

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

   Use a lower-level pip command:
   $ pipenv run pip freeze

Commands:
  check      Checks for security vulnerabilities and against PEP 508 markers
             provided in Pipfile.
  clean      Uninstalls all packages not specified in Pipfile.lock.
  graph      Displays currently-installed dependency graph information.
  install    Installs provided packages and adds them to Pipfile, or (if no
             packages are given), installs all packages from Pipfile.
  lock       Generates Pipfile.lock.
  open       View a given module in your editor.
  run        Spawns a command installed into the virtualenv.
  shell      Spawns a shell within the virtualenv.
  sync       Installs all packages specified in Pipfile.lock.
  uninstall  Un-installs a provided package and removes it from Pipfile.
  update     Runs lock, then sync.


C:\temp\example>pipenv install
Creating a virtualenv for this project…
Pipfile: C:\temp\example\Pipfile
Using C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\python.exe (3.7.3) to create virtualenv…
[==  ] Creating virtual environment...Already using interpreter C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\python.exe
Using base prefix 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0'
New python executable in C:\Users\jodox\.virtualenvs\example-Q6QloNNM\Scripts\python.exe
Command C:\Users\jodox\.virt...M\Scripts\python.exe -m pip config list had error code 1
Installing setuptools, pip, wheel...

  Complete output from command C:\Users\jodox\.virt...M\Scripts\python.exe - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_internal\__init__.py", line 19, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\__init__.py", line 8, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\connectionpool.py", line 7, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: DLL load failed: Access is denied.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 13, in <module>
ImportError: cannot import name 'main' from 'pip' (C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\__init__.py)
----------------------------------------
...Installing setuptools, pip, wheel...done.

Failed creating virtual environment
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\cli\command.py", line 254, in install
[pipenv.exceptions.VirtualenvCreationException]:       editable_packages=state.installstate.editables,
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\core.py", line 1741, in do_install
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\core.py", line 574, in ensure_project
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\core.py", line 506, in ensure_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:       python=python, site_packages=site_packages, pypi_mirror=pypi_mirror
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\core.py", line 935, in do_create_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:       extra=[crayons.blue("{0}".format(c.err)),]
[pipenv.exceptions.VirtualenvCreationException]: Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 2580, in <module>
    main()
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 831, in main
    symlink=options.symlink,
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1123, in create_environment
    install_wheel(to_install, py_executable, search_dirs, download=download)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 973, in install_wheel
    _install_wheel_with_search_dir(download, project_names, py_executable, search_dirs)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1060, in _install_wheel_with_search_dir
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=script)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 924, in call_subprocess
    raise OSError("Command {} failed with error code {}".format(cmd_desc, proc.returncode))
OSError: Command C:\Users\jodox\.virt...M\Scripts\python.exe - setuptools pip wheel failed with error code 1

Failed to create virtual environment.

C:\temp\example>

لا يزال يتلخص في مشكلة التغليف الأساسية ، لأن المقبس غير قابل للاستيراد 🤔 سوف تحتاج إلى التحقق من صحة ذلك بالرغم من ذلك.

pfmoore يبدو هذا مرتبطًا بالنقطة 🤔 ولكن يتجلى بشكل غريب عند استدعائه من Virtualenv من خلال وضع العجلة على مسار الثعبان 👍

Command C:\Users\traveler\gi...v\Scripts\python.exe -m pip config list had error code 1
Installing setuptools, pip, wheel...

  Complete output from command C:\Users\traveler\gi...v\Scripts\python.exe - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "C:\Users\traveler\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_internal\__init__.py", line 19, in <module>
  File "C:\Users\traveler\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\__init__.py", line 8, in <module>
  File "C:\Users\traveler\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\connectionpool.py", line 7, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: DLL load failed: Access is denied.

تحرير: NM ، يبدو أن Virtualenv الجديد الخاص بنا لا يمكنه الوصول إلى _socket ، يا سيئ 🤦‍♂

لذا فإن محاولة استيراد مأخذ توصيل على Virtualenv تم إنشاؤه حديثًا تفشل مع:

# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.cp37-win_amd64.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.py
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.pyw
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.pyc
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\_socket.cp37-win_amd64.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\_socket.pyd
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 583, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1043, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: Access is denied.

بينما تفعل الشيء نفسه من الثعبان المثبت

لم أستخدم مطلقًا توزيع Store لـ Python. أود أن أقترح طلب المساعدة من zooba هنا ، لأنه الخبير في هذا التوزيع.

JoDoX هل يمكنك إجراء اختبار بسيط؟ ابدأ تشغيل Python وتشغيلها

import _socket
import socket

يجب أن يعمل مع عدم وجود أخطاء. إذا تلقيت خطأ ، فالمشكلة تتعلق بشيء ما في Python ، وليس مع virtualenv (أو pip).

pfmoore انظر رسالتي أعلاه. تعمل هذه الأوامر في حالة بدء تشغيلها من Python المثبت. ومع ذلك ، فإنها تفشل من داخل بيثون البيئة الافتراضية. يبدو أنه مرتبط بطريقة ما بحقيقة أنه لا يمكن الوصول إلى مكتبات DLL إلا إذا تم تشغيلها من Python المثبتة. بمجرد نسخ الملف القابل للتنفيذ ، يبدو أنه يفقد القدرة على الوصول إلى مكتبات DLL الأولية. لست متأكدًا نظرًا لأن المشكلة تتعلق ببرنامج Virtualenv أو حزمة متجر Windows.

يحرر:

يُظهر إنشاء venv والنظر في سجل بدء التشغيل بطريقة ما محاولة venvs فعليًا تحميل ملف pyd من الموقع الأصلي. في الواقع يقوم بتحميل كل شيء من الموقع الأصلي. كل من Include و Lib فارغان. في Virtualenv نقوم بنسخها الآن ... ربما هناك طريقة أفضل لإنشاء venv مما لدينا الآن 🤔 سوف نحتاج إلى التحقيق.

# C:\Users\traveler\git\venv\lib\encodings\__pycache__\__init__.cpython-37.pyc matches C:\Users\traveler\git\venv\lib\encodings\__init__.py
# code object from 'C:\\Users\\traveler\\git\\venv\\lib\\encodings\\__pycache__\\__init__.cpython-37.pyc'
# trying C:\Users\traveler\git\venv\lib\codecs.cp37-win_amd64.pyd
# trying C:\Users\traveler\git\venv\lib\codecs.pyd
# trying C:\Users\traveler\git\venv\lib\codecs.py
# C:\Users\traveler\git\venv\lib\__pycache__\codecs.cpython-37.pyc matches C:\Users\traveler\git\venv\lib\codecs.py
# code object from 'C:\\Users\\traveler\\git\\venv\\lib\\__pycache__\\codecs.cpython-37.pyc'

ضد

# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.cp37-win_amd64.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.py
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.pyw
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.pyc
# C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\encodings\__pycache__\__init__.

gaborbernat آه ، آسف - لقد قمت بتصفح رسالتك وأساءت فهم ما كنت تقوله. خطأي.

أنا بالتأكيد لا أستبعد أن نسخ ملف Python القابل للتنفيذ قد يسبب مشاكل. نحتاج حقًا إلى zooba هنا ، لأنني لست على علم بأي مستندات على مستوى المطور حول كيفية عمل إنشاء المتجر ، ولست على دراية كافية بالشفرة للتعمق فيها.

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

يمكنك إما ربطه بالرمز أو نسخ python.exe ب venv/scripts/nt . إنها نسخة خاصة من مشغل py.exe الذي سيبحث عن pyvenv.cfg للعثور على الإصدار الفعلي المطلوب تشغيله. (أو إذا كنت لا تريد استخدام هذا الملف ، فيمكنك إنشاء إصدار آخر منه يبحث عن إعدادات التكوين المفضلة لديك.)

بمجرد خروجها من حزمة التطبيق ، لن يتم تنشيط سياقها بشكل صحيح بواسطة نظام التشغيل.

بعيدًا عن الموضوع إلى حد ما ، ولكن هل يمكنك توجيهي إلى الكود الذي يجعل الأمر كذلك (و / أو مستندات MS ذات الصلة بهذا الشأن)؟ أرغب في فهم تطبيق المتجر بشكل أفضل مما أفعله حاليًا (لا أفهم شيئًا في الأساس عن تطبيقات MS Store في الوقت الحالي) ، لذلك لا يتعين علي الاستمرار في الاتصال بك بشأن هذه الأشياء ؛-)

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

من المفترض استخدام الحزم كتطبيقات ، في المقام الأول ، مما يعني نقطة دخول واحدة (ومنع التطبيقات الأخرى من استخدام مكتبات DLL الخاصة بنا). لذلك لا يمكننا ملفات LoadLibrary في الحزمة حتى نتحقق من أننا ننتمي إلى الحزمة ، وفي الحالة العامة ، فإن الطريقة الوحيدة للقيام بذلك هي تشغيل python.exe الأصلي.

أوه ، ولكي نكون واضحين ، هذه كلها قيود متعمدة حسب تصميم نظام التشغيل. لم تختر Python إجراء أي من هذا ، لذلك لا يوجد رمز في CPython لذلك. على الرغم من أن أجزاء Launcher.c المخفية خلف تعريف VENV_REDIRECT قد تكون مثيرة للاهتمام (وتفاصيل داخلية غير مدعومة ...)

شكرا. لقد أجريت بعض البحث الموجز ، ويبدو أن https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes قد يكون ذا صلة (على الرغم من أنني لم أفعل قرأته حتى الآن ، فأنا أنشر هذا في الغالب حتى أتمكن من العثور على الرابط مرة أخرى لاحقًا ؛-))

gaborbernat أظن أن الطريقة "الصحيحة" لـ Virtualenv لدعم متجر Python ستكون بنسخ معيد التوجيه من venv/scripts/nt ، كما اقترح zooba . لكن هذا قريب جدًا من فكرة استخدام venv للقيام بإنشاء البيئة ، التي اقترحتها منذ فترة ، ولم تكن مهتمًا بها بسبب الآثار المترتبة على التوافق. أظن أنه سيكون أسوأ إذا فعلنا ذلك مع تطبيق Store ، لكن ليس Python "القياسي" مع نفس الإصدار. (بالإضافة إلى ذلك ، لست متأكدًا من أن خلط معيد التوجيه بأشياء مثل site.py المخصص لـ virtualenv قد ينجح).

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

(أوه ، و @ zooba ، بينما أحظى باهتمامكم ، إلى أي مدى يتعايش متجر Python مع تثبيت Python "العادي"؟ إذا كنت أرغب في اختبار هذه الأشياء ، فهل سأكون أفضل باستخدام جهاز افتراضي نظيف ، لتجنب التدخل مع تثبيت Python الرئيسي الخاص بي؟ أو يمكنني تثبيت وإلغاء تثبيت متجر Python دون أي آثار جانبية؟)

لذلك فكرت جيدًا في هذا. في النهاية ، أعتقد أنه من المنطقي تبديل المنطق الأساسي إلى:

  • إن أمكن ، قم بإنشاء venv باستخدام stdlib المقدم venv ، أنشأ patch stdlib venv لتقديم نفس الضمانات الخاصة بنا ،
  • خلاف ذلك ، استخدم منطقنا الخاص.

بعض الأماكن التي قد لا يكون فيها stdlib موجودًا:

  • بيثون 2
  • التوزيعات حيث يتم حزم venv بشكل منفصل وغير مثبت في الوقت الحالي (مثل ubuntu python3.7-venv). pfmoore تدرس؟ سنحتاج إلى الخروج بقائمة من الضمانات التي نقدمها في الوقت الحالي لتنفيذ ذلك.

سأكون قويًا +1 في هذا الأمر. مع وصول Python 2 إلى موسوعة الحياة قريبًا ، سنكون في موقف تكون فيه جميع الإصدارات المدعومة من Python تحتوي على venv (وتلك التي لا تملك ، لا تزال لديها الآليات - pyvenv.cfg ). لذلك إذا تمكنا من تجنب الاختراقات التي نستخدمها حاليًا قدر الإمكان ، فسيكون ذلك بمثابة فوز كبير (كما أنه سيجعل التوافق بين virtualenv و venv مشكلة :-))

الجزء الصعب هو تحديد مكونات قائمة الضمانات التي نقدمها. لست متأكدًا في الواقع من وجود العديد - الشيء الوحيد الصعب هو مشكلة sys.real_prefix مقابل sys.base_prefix ، وبصراحة أعتقد أننا يجب أن نتحرك لمتابعة stdlib في هذا على أي حال (مع فترة انتقالية مناسبة).

أنا أتفق مع pfmoore على هذا.

فقط للتوضيح ، لم يتم التخطيط لإسقاط دعم Python 2 على الأقل خلال السنوات الثلاث المقبلة. سيفضل الحل الجديد فقط استخدام stdlib venv حيثما أمكن والرجوع إلى المنطق المدمج بخلاف ذلك.

مفهوم. يجب أن تظل العملية الحالية بحيث يتم دعم Python 2 ، ولكن إذا تمكنا من تجنبها حيث يتوفر Core venv ، فهذا رائع.

بدأت مناقشة منفصلة في https://github.com/pypa/virtualenv/issues/1366 👍

(أوه ، و @ zooba ، بينما أحظى باهتمامكم ، إلى أي مدى يتعايش متجر Python مع تثبيت Python "العادي"؟ إذا كنت أرغب في اختبار هذه الأشياء ، فهل سأكون أفضل باستخدام جهاز افتراضي نظيف ، لتجنب التدخل مع تثبيت Python الرئيسي الخاص بي؟ أو يمكنني تثبيت وإلغاء تثبيت متجر Python دون أي آثار جانبية؟)

آسف فاتني هذا ، pfmoore (لا تلفت إشعارات Github انتباهي دائمًا ...).

يمكنك تثبيت / إلغاء تثبيت متجر Python بدون أي آثار جانبية - هذه في الواقع واحدة من أكبر ميزاته. (على الرغم من أن الجانب السلبي لهذا هو أنه لا يمكن تحديث سجل المستخدم الحقيقي ، وبالتالي فإن PEP 514 ليس كافيًا تمامًا ، لأن قيم الكتابة ستؤدي إلى كسر دورة التثبيت / إلغاء التثبيت النظيف.)

أعتقد أننا تحدثنا عبر Twitter أنه لن يكون هناك مشكلة في الكتابة إذا استخدمنا شركة مختلفة (مثل متجر Microsoft) بدلاً من PythonCore لكل pep 514. وبعد ذلك نحتاج فقط إلى تحديث py.exe لقبول ذلك أيضًا.

استخدام venv بدلاً من virtualenv يحل المشكلة بالنسبة لي

لا يمكن أن يدعم Virtualenv القديم هذا ولن يدعمه. يجب إعادة كتابة Virtualenv 20. نحتاج إلى التحقق من صحة ، للأسف AFAIK ، لا يمكن إضافة متجر python إلى Azure CI. zooba هل يمكنك تأكيد أن الأمر لا يزال كذلك ، وهل ستمضي قدمًا؟

في التكرار الأول ، يمكننا فقط تحديد الطريقة المضمنة / الذاتية التي لا تدعم المتجر ؛ للتحقق مما إذا كان الثعبان مخزن بيثون اقترح zooba :

ربما تريد محاولة فتح ملف sys. قابل للتنفيذ للقراءة بعد ذلك ، حيث أعتقد أن هذه أكبر مشكلة تواجهك (ستفشل)
أو يمكنك التحقق مما إذا كان pythonXY.dll ليس في نفس الدليل مثل sys.executable ، وهو ما أعتقد أنه افتراض آخر ستحتاج إلى إصلاحه
يمكن أن يحدث ذلك بعدة طرق مختلفة (التضمين ، والتجميد ، والبناء الثابت) وأظن أن Virtualenv لن تعمل مع أي منها في الوقت الحالي
على الرغم من أن المثبتات القديمة (ما قبل 3.5) يمكنها وضعها في مجلد النظام ، والذي سيظل يعمل ، لذلك ليس اختبارًا مثاليًا.

تم تحقيق هذا الآن كجزء من # 1502. سيقوم برنامج Virtualenv بتمييز متجر python بشكل صحيح على أنه غير متوافق مع إستراتيجيته المضمنة والرجوع إلى الخلف لتفويض المهمة إلى وحدة venv في متجر python. تم اجتياز مجموعة الاختبار للمشروع. علاوة على ذلك ، سنستخدم الآن الارتباط الرمزي بدلاً من طريقة النسخ إذا كان نظام التشغيل Windows يدعمه (نختبر ذلك من خلال محاولة إنشاء ارتباط رمزي داخل مجلد مؤقت).

قد يتم دعم Microsoft Store داخل virtualenv في تذكرة لاحقة مستقبلية ، ربما عن طريق تحسين فئة cpython3windows لدينا لاستخدام التقنيات الجديدة اللازمة لذلك.

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