Virtualenv: dukungan python toko microsoft

Dibuat pada 2 Jun 2019  ·  26Komentar  ·  Sumber: pypa/virtualenv

  1. Instal Python 3.7 dari Microsoft Store
  2. dapatkan kesalahan saat mencoba membuat virtualenv baru
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

Semua 26 komentar

@zooba ini terasa seperti kemasan yang buruk di sisi toko Windows ?

@gaborbernat Saya pikir bug di virtualenv, karena modul venv berfungsi dengan baik

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>

Tidak benar-benar laki-laki. venv menyediakan venv yang dibuat dengan apa pun yang telah Anda bundel. Di sini mengimpor tumpukan jaringan gagal (yang dilakukan virtualenv untuk menginstal pip/setuptools terbaru). Lewatkan --no-download dan virtualenv juga harus berfungsi.

@gaborbernat Saya tidak ingin virtualenv, tetapi pipenv menggunakannya dan tidak memiliki opsi untuk meneruskan 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>

Ini masih bermuara pada masalah pengemasan inti, karena _socket tidak dapat diimpor Namun perlu memvalidasi ini.

@pfmoore ini sepertinya terkait pip tetapi anehnya bermanifestasi ketika dipanggil dari virtualenv dengan meletakkan roda di jalur python 👍

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.

Sunting: NM, sepertinya virtualenv baru kami tidak memiliki akses ke _socket, sayang sekali

Jadi mencoba mengimpor _socket pada virtualenv yang baru dibuat gagal dengan:

# 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.

Saat melakukan hal yang sama dari python yang diinstal

Saya tidak pernah menggunakan distribusi Store dari Python. Saya sarankan meminta bantuan @zooba di sini, karena dia ahli dalam distribusi itu.

@JoDoX Bisakah Anda melakukan tes sederhana? Mulai Python, dan jalankan

import _socket
import socket

Itu harus bekerja tanpa kesalahan. Jika Anda mendapatkan kesalahan, maka masalahnya ada pada sesuatu di Python, bukan dengan virtualenv (atau pip).

@pfmoore lihat postingan saya diatas. Perintah-perintah itu berfungsi jika memulainya dari python yang diinstal. Namun, mereka gagal dari dalam python lingkungan virtual. Tampaknya entah bagaimana terkait dengan fakta bahwa DLL hanya dapat diakses jika dijalankan dari Python yang diinstal. Setelah Anda menyalin executable, tampaknya kehilangan kemampuan untuk mengakses DLL upstream. Tidak yakin mengingat ini masalahnya terkait virtualenv atau kemasan toko Windows.

Sunting:

Membuat venv dan melihat log startup menunjukkan entah bagaimana venvs benar-benar mencoba memuat pyd dari lokasi aslinya. Itu benar-benar memuat semuanya dari lokasi aslinya. Baik Sertakan dan Lib kosong. Di virtualenv kami menyalin ini untuk saat ini.... Mungkin ada cara yang lebih baik untuk membuat venvs daripada yang kami miliki sekarang Perlu diselidiki.

# 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'

vs

# 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 Ah, maaf - saya membaca sekilas postingan Anda dan salah memahami apa yang Anda katakan. Salahku.

Saya tentu tidak akan mengesampingkan bahwa menyalin executable Python dapat menyebabkan masalah. Kami benar-benar membutuhkan @zooba di sini, karena saya tidak mengetahui dokumen tingkat pengembang tentang cara kerja Store build, dan saya tidak cukup akrab dengan kode untuk menyelaminya.

Ya, Anda tidak dapat menyalin file yang dapat dieksekusi. Setelah berada di luar paket aplikasi, konteksnya tidak akan diaktifkan dengan benar oleh sistem operasi.

Anda dapat menghubungkannya atau menyalin python.exe yang ada di venv/scripts/nt . Ini adalah salinan khusus dari peluncur py.exe yang akan mencari pyvenv.cfg untuk menemukan yang sebenarnya untuk diluncurkan. (Atau jika Anda tidak ingin menggunakan file itu, Anda dapat membuat versi lain yang mencari pengaturan konfigurasi pilihan Anda.)

Setelah berada di luar paket aplikasi, konteksnya tidak akan diaktifkan dengan benar oleh sistem operasi.

Agak di luar topik, tetapi dapatkah Anda mengarahkan saya pada kode yang membuat ini menjadi kasusnya (dan/atau dokumen MS yang relevan tentang ini)? Saya ingin memahami aplikasi toko lebih baik daripada yang saya lakukan saat ini (pada dasarnya saya tidak mengerti apa-apa tentang aplikasi MS Store saat ini), jadi saya tidak perlu terus mem-ping Anda tentang hal ini ;-)

Saya tidak yakin bahwa bagian ini bahkan didokumentasikan, dan jika ya, mungkin akan jauh di dalam dokumen MSIX atau mungkin di beberapa spesifikasi AppV jika Anda dapat menemukannya (yang merupakan versi lama dari teknologi isolasi yang digunakan) .

Paket dimaksudkan untuk digunakan sebagai aplikasi, terutama, yang berarti satu titik masuk (dan mencegah aplikasi lain menggunakan DLL kami). Jadi kami tidak dapat LoadLibrary file dalam paket sampai kami memverifikasi bahwa kami termasuk dalam paket, dan dalam kasus umum satu-satunya cara untuk melakukannya adalah meluncurkan python.exe asli.

Oh, dan untuk lebih jelasnya, ini semua adalah pembatasan OS yang dirancang khusus. Python tidak memilih untuk membuat semua ini terjadi, jadi tidak ada kode di CPython untuk itu. Meskipun bagian dari launcher.c yang tersembunyi di balik VENV_REDIRECT define mungkin menarik (dan tidak didukung, detail internal...)

Terima kasih. Saya melakukan penggalian singkat, dan https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes sepertinya relevan (walaupun saya belum baca belum, saya kebanyakan memposting ini sehingga saya dapat menemukan tautannya lagi nanti ;-))

@gaborbernat Saya menduga cara "benar" bagi virtualenv untuk mendukung store Python adalah dengan menyalin redirector dari venv/scripts/nt , seperti yang disarankan @zooba . Tapi itu sangat mirip dengan ide menggunakan venv untuk melakukan pembuatan lingkungan, yang saya sarankan beberapa waktu lalu, dan Anda tidak tertarik karena implikasi kompatibilitas. Saya menduga akan lebih buruk lagi jika kita melakukannya untuk aplikasi Store, tetapi bukan Python "standar" dengan versi yang sama. (Plus, saya tidak yakin bahwa mencampur redirector dengan hal-hal seperti site.py kustom virtualenv bahkan akan berfungsi).

Saya senang membantu dengan pengkodean, tetapi saya membutuhkan panduan Anda tentang pendekatan yang ingin Anda ambil.

(Oh, dan @zooba , sementara saya mendapat perhatian Anda, seberapa baik toko Python hidup berdampingan dengan instalasi Python "normal"? Jika saya ingin menguji hal ini, apakah saya akan lebih baik dengan VM bersih, untuk menghindari gangguan dengan instalasi Python utama saya? Atau bisakah saya menginstal dan menghapus toko Python tanpa efek samping?)

Jadi saya memikirkan ini dengan baik. Pada akhirnya, saya pikir masuk akal untuk mengganti logika inti ke:

  • jika memungkinkan buat venv dengan venv yang disediakan stdlib, tambal stdlib buat venv untuk menawarkan jaminan yang sama dengan milik kita,
  • jika tidak, gunakan logika kita sendiri.

Beberapa tempat di mana stdlib disediakan mungkin venv mungkin tidak ada:

  • ular piton 2,
  • distribusi di mana venv dikemas secara terpisah dan tidak diinstal saat ini (seperti ubuntu python3.7-venv). @pfmoore diajarkan? Kami harus membuat daftar jaminan yang kami tawarkan saat ini untuk menerapkan ini.

Saya akan menjadi +1 yang kuat dalam hal ini. Dengan Python 2 mencapai EOL segera, kita akan berada dalam situasi di mana pada dasarnya semua versi Python yang didukung memiliki venv (dan yang tidak, masih memiliki mekanisme - pyvenv.cfg ). Jadi, jika kami dapat menghindari peretasan yang saat ini kami gunakan sebanyak mungkin, itu akan menjadi kemenangan besar (dan itu juga akan membuat kompatibilitas antara virtualenv dan venv tidak menjadi masalah :-))

Bagian yang sulit adalah memutuskan apa yang merupakan daftar jaminan yang kami tawarkan. Saya sebenarnya tidak yakin ada banyak - satu-satunya yang sulit adalah masalah sys.real_prefix vs sys.base_prefix , dan sejujurnya saya yakin kita harus mengikuti stdlib dalam hal ini (dengan periode transisi yang sesuai).

Saya setuju dengan @pfmoore tentang ini.

Untuk memperjelas, dukungan Python 2 tidak direncanakan untuk dihentikan setidaknya selama 3 tahun ke depan. Solusi baru hanya akan lebih suka menggunakan stdlib venv jika memungkinkan dan mundur ke logika bawaan jika tidak.

Dipahami. Proses yang ada harus tetap ada agar Python 2 didukung, tetapi jika kita dapat menghindarinya di mana core venv tersedia, itu bagus.

Memulai diskusi terpisah di https://github.com/pypa/virtualenv/issues/1366 👍

(Oh, dan @zooba , sementara saya mendapat perhatian Anda, seberapa baik toko Python hidup berdampingan dengan instalasi Python "normal"? Jika saya ingin menguji hal ini, apakah saya akan lebih baik dengan VM bersih, untuk menghindari gangguan dengan instalasi Python utama saya? Atau bisakah saya menginstal dan menghapus toko Python tanpa efek samping?)

Maaf saya melewatkan ini, @pfmoore (notifikasi Github tidak selalu menarik perhatian saya...).

Anda dapat menginstal/menghapus instalan toko Python tanpa efek samping - ini sebenarnya adalah salah satu fitur terbesarnya. (Meskipun kelemahannya adalah tidak dapat memperbarui registri pengguna sebenarnya, sehingga PEP 514 tidak cukup memadai, karena menimpa nilai akan memutus siklus pemasangan/pencopotan pemasangan yang bersih.)

Saya pikir kami berbicara melalui Twitter bahwa itu tidak akan menjadi masalah menimpa jika per pep 514 kami menggunakan perusahaan yang berbeda (misalnya Microsoft Store) bukan PythonCore. Dan kemudian kita hanya perlu memperbarui py.exe untuk menerimanya juga.

menggunakan venv alih-alih virtualenv memecahkan masalah untuk saya

Virtualenv lama tidak dapat dan tidak akan mendukung ini. virtualenv 20, penulisan ulang, seharusnya. Kami perlu memvalidasi, sayangnya AFAIK tidak mungkin menambahkan store python ke Azure CI. @zooba dapatkah Anda mengonfirmasi bahwa ini masih terjadi, dan akan dilanjutkan?

Pada iterasi pertama kita cukup menandai metode builtin/self-do tidak mendukung toko; untuk memeriksa apakah python adalah store pyhton yang disarankan @zooba :

Anda mungkin ingin mencoba membuka sys.executable untuk membaca, karena saya pikir itu masalah terbesar Anda (itu akan gagal)
Atau Anda dapat memeriksa apakah pythonXY.dll tidak berada di direktori yang sama dengan sys.executable, yang menurut saya merupakan asumsi lain yang perlu Anda perbaiki
Itu dapat terjadi dalam beberapa cara berbeda (menyematkan, membekukan, membangun statis) dan saya menduga virtualenv tidak akan berfungsi dengan salah satu dari mereka sekarang
Meskipun penginstal lama (pra 3.5) dapat memasukkannya ke dalam folder sistem, yang akan tetap berfungsi, jadi bukan tes yang sempurna.

Ini sekarang telah dicapai sebagai bagian dari #1502. Virtualenv akan menandai store python dengan benar sebagai tidak kompatibel dengan strategi bawaan dan fallback untuk mendelegasikan tugas ke modul venv dari store python. Paket uji proyek lolos. Selanjutnya, sekarang kita akan menggunakan symlink alih-alih metode salin jika OS Windows mendukungnya (kami menguji ini dengan mencoba membuat symlink di dalam folder temp).

Dukungan bawaan untuk Microsoft Store dalam virtualenv dapat dilakukan di tiket berikutnya di masa mendatang, mungkin dengan meningkatkan kelas cpython3windows kami untuk menggunakan teknik baru yang diperlukan untuk ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat