Я пытаюсь связать подпроцесс python.Popen с пакетом Snap, который я создал.
Чтобы узнать о создании пакета snap , я решил создать контейнер snap для редактора уценок, встроенного в python, которым я регулярно пользуюсь. Мне удалось создать файл snapcraft.yaml, который я могу успешно установить и запустить редактор.
Однако редактор позволяет пользователю открыть второе окно, например, для редактирования второго файла. Внутренне он вызывает subprocess.Popen(sys.argv[0])
, поэтому он создает собственный дочерний процесс.
Я не могу ограничить этот новый процесс самой привязкой.
argv0 для родительского и дочернего элементов установлен на /snap/remarkable-deadolus/x34/bin/remarkable
, что я проверилпутем создания некоторого отладочного вывода.
Новый процесс не может найти некоторые библиотеки, которые, по-видимому, были успешно найдены (так как пакет моментальных снимков установил их) основным процессом:
Traceback (most recent call last):
File "/snap/remarkable-deadolus/x34/bin/remarkable", line 72, in <module>
import remarkable
File "/snap/remarkable-deadolus/x34/remarkable/__init__.py", line 26, in <module>
import gi
ModuleNotFoundError: No module named 'gi'
При исследованииЯ обнаружил, что некоторые переменные (среды), кажется, отличаются между созданием основного процесса привязки и его дочерних элементов. Вызов print(sys.prefix)
в родительском файле производит /snap/remarkable-deadolus/x33/usr
. У ребенка, однако, он производит /usr
.
Итак, мой вопрос как я могу ограничить дочерние процессы программы привязки python к пакету привязки?
Вот мой прогресс: DeadolusGithub Замечательно с файлом snapcraft.yaml
Для справки, мои команды для сборки и запуска пакета snap:
snapcraft --debug
sudo snap install --devmode *.snap
remarkable-deadolus
В файле snapcraft.yaml я включил строгое заключениедобавив
confinement: strict