У меня также есть 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.
- В новом проекте (), добавить numpy и клавиатуру: поэзия добавить numpy клавиатуру.
Код: Выделить всё
cd testProject - В основную папку 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
Мобильная версия