Встраиваемый Zip-файл Python не включает lib/site-packages в sys.path

Я пытаюсь обновить нашу версию Python с 3.4 до 3.6. Мы встраиваем Python в приложение C++, поэтому представляется логичным использовать новый (начиная с Python 3.5) zip-файл для Windows x86. Тем не менее, наше приложение не выполняется, потому что "lib/site-packages" не добавляется в sys.path переменная. Я подтвердил, что после установки Python 3.6 на моем компьютере и запуска из установленного местоположения sys.path переменная содержит (относительно каталога python):

'...\\python36.zip'
'...\\DLLs'
'...\\lib'
'...'
'...\\lib\\site-packages'

Однако при запуске из встраиваемого zip-файла на том же компьютере sys.path переменная содержит (относительно каталога python):

'...\\python36.zip'
'...'
'...\\\n'

В обоих случаях каталог "lib/site-packages" существует в каталоге Python. У меня также нет определенной переменной окружения PYTHONPATH. Кто-нибудь знает, как заставить встраиваемый почтовый файл действовать так же, как установленная версия, в зависимости от того, как он определяет sys.path?

1 ответ

Решение

После извлечения встраиваемого zip-файла Python в корневом каталоге находится файл с именем "python36._pth". Этот файл содержит следующий текст:

# Uncomment to run site.main() automatically
#import site

Как указано в комментарии, просто раскомментируйте import site заявление, удалив символ "#". После этого sys.path переменная содержит:

'...\\python36.zip'
'...'
'...\\\n'
'...\\lib\\site-packages'

Это все еще отличается от установленной версии, но это именно то, что мне нужно в моем конкретном случае.

НАЧАТЬ РЕДАКТИРОВАТЬ

Я также обнаружил, что вы можете полностью удалить файл "python36._pth", который возвращает Python к поведению не-встраиваемой версии.

Предыдущие ответы не сработали для нас, нам пришлось изменить файл._pth, чтобы напрямую добавить папку site-packages в sys.path. Мы работаем с Python 3.8 в среде Python, встраиваемой в Windows.

Итак, наш файл python38._pth теперь выглядит так

python38.zip
.
python38.zip\\site-packages

#Uncomment to run site.main() automatically
import site

Для ясности: изначально мы запускали python с просто раскомментированным словом "import site", все, что мы видели в sys.path, - это пути к папкам python38.zip и python, без пакетов сайтов.

Поэтому всем, кто рискнет здесь, попробуйте явно добавить нужные пути, если раскомментирование строки "импорт сайта" вам не подходит.

Также попробовал следующее в нашем файле._pth

python38.zip/site-packages

и это также работало с окнами, '/' был правильно заменен на '\' автоматически, а пакеты сайтов все еще находились в пути sys и могли использоваться

Другие вопросы по тегам