mirror of
https://github.com/niess/python-appimage.git
synced 2026-03-14 04:10:15 +01:00
_initappimage in site.py
This commit is contained in:
@@ -1,9 +1,16 @@
|
||||
{{ shebang }}
|
||||
|
||||
# Export APPRUN if running from an extracted image
|
||||
self="$(readlink -f -- $0)"
|
||||
here="${self%/*}"
|
||||
APPDIR="${APPDIR:-${here}}"
|
||||
# If running from an extracted image, then export ARGV0 and APPDIR
|
||||
if [ -z "${APPIMAGE}" ]; then
|
||||
export ARGV0=$0
|
||||
|
||||
self="$(readlink -f -- $0)"
|
||||
here="${self%/*}"
|
||||
export APPDIR="${APPDIR:-${here}}"
|
||||
fi
|
||||
|
||||
# Resolve the calling command (preserving symbolic links).
|
||||
export APPIMAGE_COMMAND="$(command -v -- $ARGV0)"
|
||||
{{ tcltk-env }}
|
||||
{{ cert-file }}
|
||||
|
||||
|
||||
@@ -1,25 +1 @@
|
||||
for opt in "$@"
|
||||
do
|
||||
[ "${opt:0:1}" != "-" ] && break
|
||||
if [[ "${opt}" =~ "I" ]] || [[ "${opt}" =~ "E" ]]; then
|
||||
# Environment variables are disabled ($PYTHONHOME). Let's run in a safe
|
||||
# mode from the raw Python binary inside the AppImage
|
||||
"$APPDIR/opt/{{ python }}/bin/{{ python }}" "$@"
|
||||
exit "$?"
|
||||
fi
|
||||
done
|
||||
|
||||
# Get the executable name, i.e. the AppImage or the python binary if running from an
|
||||
# extracted image
|
||||
executable="${APPDIR}/opt/{{ python }}/bin/{{ python }}"
|
||||
if [[ "${ARGV0}" =~ "/" ]]; then
|
||||
executable="$(cd $(dirname ${ARGV0}) && pwd)/$(basename ${ARGV0})"
|
||||
elif [[ "${ARGV0}" != "" ]]; then
|
||||
executable=$(which "${ARGV0}")
|
||||
fi
|
||||
|
||||
# Wrap the call to Python in order to mimic a call from the source
|
||||
# executable ($ARGV0), but potentially located outside of the Python
|
||||
# install ($PYTHONHOME)
|
||||
(PYTHONHOME="${APPDIR}/opt/{{ python }}" exec -a "${executable}" "$APPDIR/opt/{{ python }}/bin/{{ python }}" "$@")
|
||||
exit "$?"
|
||||
"$APPDIR/opt/{{ python }}/bin/{{ python }}" "$@"
|
||||
|
||||
16
python_appimage/data/site-patch.py
Normal file
16
python_appimage/data/site-patch.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# This is a site.py patch when calling Python from an AppImage.
|
||||
def _initappimage():
|
||||
"""Initialise executable name for running from an AppImage."""
|
||||
env = os.environ
|
||||
try:
|
||||
command = env["APPIMAGE_COMMAND"]
|
||||
except KeyError:
|
||||
return
|
||||
|
||||
if command and ("APPDIR" in env):
|
||||
command = os.path.abspath(command)
|
||||
sys.executable = command
|
||||
sys._base_executable = command
|
||||
|
||||
_initappimage()
|
||||
del _initappimage
|
||||
@@ -1,34 +1,10 @@
|
||||
'''Hooks for isloating the AppImage Python and making it relocatable
|
||||
'''Python AppImage hooks
|
||||
'''
|
||||
import atexit
|
||||
import os
|
||||
import sys
|
||||
|
||||
|
||||
def clean_path():
|
||||
'''Remove system locations from the packages search path
|
||||
'''
|
||||
site_packages = '/usr/local/lib/python{:}.{:}/site-packages'.format(
|
||||
*sys.version_info[:2])
|
||||
binaries_path = '/usr/local/bin'
|
||||
env_path = os.getenv("PYTHONPATH")
|
||||
if env_path is None:
|
||||
env_path = []
|
||||
else:
|
||||
env_path = [os.path.realpath(path) for path in env_path.split(':')]
|
||||
|
||||
if ((os.path.dirname(sys.executable) != binaries_path) and
|
||||
(site_packages not in env_path)):
|
||||
# Remove the builtin site-packages from the path
|
||||
try:
|
||||
sys.path.remove(site_packages)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
clean_path()
|
||||
|
||||
|
||||
_bin_at_start = os.listdir(sys.prefix + '/bin')
|
||||
'''Initial content of the bin/ directory
|
||||
'''
|
||||
@@ -108,4 +84,8 @@ def patch_pip_install():
|
||||
os.remove(path)
|
||||
|
||||
|
||||
atexit.register(patch_pip_install)
|
||||
if os.getenv('VIRTUAL_ENV') is None:
|
||||
atexit.register(patch_pip_install)
|
||||
else:
|
||||
del _bin_at_start
|
||||
del patch_pip_install
|
||||
|
||||
Reference in New Issue
Block a user