Hi,
I ran into the same Python issue and I "backported" the Python 3.8 faking for Python 3.9. Matlab installed and I was able to start a Matlab engine from an iPython shell, so I would suspect it works.
I even installed the Update 3 as root after Matlab told me I could do that from the little bell icon menu and it still works.
Patch:
diff --git a/PKGBUILD b/PKGBUILD
index b6a40eb..87f79b8 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -150,22 +150,53 @@ build() {
# cause the installation to be non-interactive
"${srcdir}/${pkgname}/install" -inputFile "${srcdir}/${pkgname}/installer_input.txt"
+ # Create spoofing for Python API
+ # https://aur.archlinux.org/packages/matlab-engine-for-python/
+ cd "${srcdir}/build/extern/engines/python"
+ # Getting appropriate python version for spoofing
+ _matminor="$(find "${srcdir}/build/extern/engines/python" \
+ -name 'matlabengineforpython3*.so' |
+ sort |
+ sed 's|.*matlabengineforpython3_\([0-9]\)\.so|\1|g' |
+ tail -1)"
+ echo 'import sys' > "${srcdir}/sitecustomize.py"
+ echo "sys.version_info = (3, ${_matminor}, 0)" >> "${srcdir}/sitecustomize.py"
+
# Build the python API
cd "${srcdir}/build/extern/engines/python"
- python setup.py build
+ PYTHONPATH="${srcdir}" python setup.py build
}
package() {
# Package the python API
cd "${srcdir}/build/extern/engines/python"
- python setup.py install --root="${pkgdir}" --optimize 1 --skip-build
- # Fix erronous referances in the _arch.txt files
+ PYTHONPATH="${srcdir}" python setup.py install --root="${pkgdir}" --optimize 1 --skip-build
+
+ # Spoofing trick to fool matlab into believing python 3.9 is supported
+ _matminor="$(find "${srcdir}/build/extern/engines/python" \
+ -name 'matlabengineforpython3*.so' |
+ sort |
+ sed 's|.*matlabengineforpython3_\([0-9]\)\.so|\1|g' |
+ tail -1)"
+ _prefix="$(python -c 'import sys; print(sys.prefix)')"
+ _pytminor="$(python -c 'import sys; print(sys.version_info.minor)')"
+
+ # Correct file names
+ if [[ "${_pytminor}" != "${_matminor}" ]]; then
+ mv "${pkgdir}/${_prefix}/lib/python3".{"${_matminor}","${_pytminor}"}
+ _egginfo="$(ls "${pkgdir}/${_prefix}/lib/python3.${_pytminor}/site-packages/"*"-py3.${_matminor}.egg-info")"
+ mv "${_egginfo}" "${_egginfo%py3."${_matminor}".egg-info}py3.${_pytminor}.egg-info"
+ sed -i "s|sys.version_info|(3, $_matminor, 0)|" \
+ "${pkgdir}/${_prefix}/lib/python3.${_pytminor}/site-packages/matlab/engine/__init__.py"
+ fi
+
+ # Fix erronous references in the _arch.txt files
_prefix="$(python -c 'import sys; print(sys.prefix)')"
errstr="${srcdir}/build/extern/engines/python/"
trustr="${instdir}/extern/engines/python/"
for _dir in \
"${srcdir}/build/extern/engines/python/build/lib/matlab/engine" \
- "${pkgdir}/${_prefix}/lib/python3.8/site-packages/matlab/engine" \
+ "${pkgdir}/${_prefix}/lib/python3.${_pytminor}/site-packages/matlab/engine" \
; do
sed -i "s|${errstr}|${trustr}|" "${_dir}/_arch.txt"
done
Pinned Comments