\documentclass[aspectratio=169]{beamer} %\setbeameroption{show notes on second screen} \usepackage[utf8]{inputenc} \usepackage{graphicx} \usepackage{tikz} \usetikzlibrary{shapes.geometric} \definecolor{SUSEgreen}{RGB}{115, 186, 37} \usecolortheme[named=SUSEgreen]{structure} \usepackage{fontspec} \setmainfont{Urania Czech} \setsansfont{Urania Czech} \usepackage{minted} \title{Python packaging in openSUSE} \subtitle{Advantages against other distributions} \author[mcepl]{Matěj Cepl \\ \texttt{mcepl@cepl.eu}} \date[openSUSECon 2022]{openSUSE Conference, June 2022} \newcommand{\authortitle}{} \newcommand{\organization}{SUSE} \newcommand{\event}{OpenSUSE Conference 2022} \begin{document} \frame{\titlepage} % \begin{frame} % % \begin{tikzpicture}[remember picture,overlay] % \node at (5cm,-0.5cm) {\includegraphics[width=9.33cm,height=8cm,keepaspectratio]{package.png}}; % \end{tikzpicture} % % \end{frame} \begin{frame} \frametitle{Problems in the Python non-specific packaging} \begin{itemize} \item Multiple interpreters \item Complicated commands \item Not enough checking \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Multiple interpreters} \begin{minipage}[t]{.35\textwidth} \begin{minted}{spec} %build %if %{with python3} %py3_build %else %py2_build %endif \end{minted} \end{minipage} % \hfill % \pause % \begin{minipage}[t]{.35\textwidth} \begin{minted}{spec} %build %python_build \end{minted} \end{minipage} \end{frame} \begin{frame}[fragile] \frametitle{Complicated commands} \begin{minted}{spec} %check export PYTHONPATH=%{buildroot}%{python_sitelib} PYTHONDONTWRITEBYTECODE=1 pytest --ignore=build.* -v \end{minted} \note{And this is still not correct, because it must be done for all Python versions separately (and those \texttt{--ignore=build*} must be arranged accordingly). And we need to be able to take into consideration existing \texttt{PYTHONPATH}.} \pause Or we do: \begin{minted}{spec} %check %pytest \end{minted} \end{frame} \begin{frame}[fragile] \frametitle{Example} \scriptsize \begin{minted}{spec} %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-foobar Version: 1.0.2 Release: 0 Summary: Example foobar package License: MIT URL: https://github.com/bumba/foobar Source: https://files.pythonhosted.org/packages/source/f/foobar/foobar-%{version}.zip # PATCH-FIX-UPSTREAM remove_mock.patch bsc#123456 mcepl@suse.com # we don't need stinking mock Patch0: remove_mock.patch BuildRequires: %{python_module appdirs} BuildRequires: %{python_module pytest} BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-appdirs BuildArch: noarch %python_subpackages %description foobar is a collection of enhancements to the Python packages that allow you to build and distribute Python packages, \end{minted} \note[item]{Eliminate as much boiler-plate as possible. We have only two lines now, which are same every time: that python\_module definition and Release. And in both cases we are just forced to have them there by the mechanics of RPM.} \note[item]{Note that macro python\_subpackages, that’s the root of all machinations. In effect this SPEC file is just a foundation, I don’t want to use the term “template”, because that would be misleading, for multiple generated ones.} \end{frame} \begin{frame}[fragile] \frametitle{Example (cont.)} \scriptsize \begin{minted}{spec} %prep %autosetup -p1 -n foobar-%{version} %build export NOBUMPA=1 %python_build %install %python_install %python_expand %fdupes %{buildroot}%{$python_sitelib} %check %pytest %files %{python_files} %license LICENSE %doc CHANGES.rst README.rst %{_bindir}/foobar %{python_sitelib}/foobar %{python_sitelib}/foobar-%{version}*-info %changelog \end{minted} \note[item]{Using \texttt{autosetup} to avoid dealing with each patch again.} \end{frame} \begin{frame} \frametitle{Not enough checking} \begin{itemize} \item Given the number of packages we maintain (over 2,500 in Factory) we need to put as much work as possible on machines. \item Packages are auto-generated by `py2pack`. \end{itemize} \note[item]{They are auto-generated, but they are more like a ready-to-cook food, they need to be finished.} \note[item]{And yes, it is similar to the Fedora’s \texttt{pyp2rpm}, but we have never managed to unify two code-bases. If anybody is willing to do the work, it would be lovely.} \end{frame} \begin{frame} \frametitle{Thank you!} My email is mcepl@cepl.eu.\vspace{1em} \tiny \LaTeX\hspace{0.01em} source of this presentation is available on https://gitlab.com/mcepl/opensuseconf.git. \end{frame} \end{document}