Встраиваемый 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 и могли использоваться