Poetry сначала ищет пакеты в глобальном PYTHONPATH, а не в виртуальной среде, управляемой поэзией.Python

Программы на Python
Ответить
Anonymous
 Poetry сначала ищет пакеты в глобальном PYTHONPATH, а не в виртуальной среде, управляемой поэзией.

Сообщение Anonymous »

В Windows у меня есть проект поэзии, который ссылается на Python 3.12 и включает зависимости от пакетов A и B. Поэзия была добавлена ​​в мою систему с помощью pipx в контексте Python 3.12.
У меня также есть Python 3.8 на моем компьютере с пакетом A, установленным в глобальной среде с помощью pip install. Это связано с тем, что у меня есть надстройка Python в другом программном обеспечении, требующем Python 3.8. Для этой надстройки также требуется, чтобы у меня была переменная системной среды PYTHONPATH, которая ссылается на расположение моих пакетов 3.8 (usr\AppData\Local\Programs\Python\Python38\Lib\site-packages), чтобы она могла найти, где искать пакеты.
Во всяком случае, когда я пытаюсь запустить сценарий в моем поэтическом проекте, я получаю ошибку импорта при «импорте пакета A», потому что это очевидно, пытается импортировать сначала из глобальной библиотеки Python38, а не из VE, управляемой поэзией, и поскольку пакет A оказался установлен в глобальной библиотеке Python38, он использует ту версию, которая несовместима. Ему по-прежнему удается без проблем найти пакет B, даже несмотря на то, что пакет B установлен только в поэтическом VE.
Если я удалю системную переменную env PYTHONPATH, все будет работать так, как ожидалось - он использует только пакеты, которые он находит в поэзии VE.
Почему Poetry сначала ищет местоположение PYTHONPATH, а не его VE? Как я могу предотвратить такое поведение? Или я что-то еще упускаю?
Я поискал и нигде не нашел упоминаний об этой конкретной проблеме.
Пошаговые инструкции воспроизведите это:
  • Установите Python 3.12 и установите поэзию, используя pipx в соответствии со стандартным подходом к установке поэзии.
  • Установите Python 3.8 и добавьте переменную системной среды:

    Код: Выделить всё

    PYTHONPATH = C:\Users\username\AppData\Local\Programs\Python\Python38\Lib\site-packages
    
  • В контексте глобальной среды Python 3.8 выполните pip install numpy.
  • Создайте поэтический проект в контексте поэзии Python 3.12 новый testProject.
  • В новом проекте (

    Код: Выделить всё

    cd testProject
    ), добавить numpy и клавиатуру: поэзия добавить numpy клавиатуру.
  • В основную папку testProject добавьте файл «test.py» с содержимым:

Код: Выделить всё

import keyboard
import numpy
  • Запустите поэзию test.py; Клавиатура импортируется нормально, но при импорте numpy вы получаете (частичный) вывод ниже:

Код: Выделить всё

PS D:\path\to\poetry\project\testProject> poetry run .\test.py
Traceback (most recent call last):
File "C:\Users\######\AppData\Local\Programs\Python\Python38\Lib\site-packages\numpy\core\__init__.py", line 23, in 
from . import multiarray
File "C:\Users\######\AppData\Local\Programs\Python\Python38\Lib\site-packages\numpy\core\multiarray.py", line 10, in 
from . import overrides
File "C:\Users\######\AppData\Local\Programs\Python\Python38\Lib\site-packages\numpy\core\overrides.py", line 6, in 
from numpy.core._multiarray_umath import (
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
  • Как видно, поэзия пытается запустить numpy из глобальной папки site-packages Python 3.8.
  • Удалите переменную системной среды PYTHONPATH, созданную выше, и в новом окне Power Shell снова запустите поэтический запуск test.py без ошибок.


Подробнее здесь: https://stackoverflow.com/questions/793 ... try-manage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»