Packen eines beliebigen Python-Pakets in ein RPM-Paket mit Offline-Installationsoption

Es gibt Situationen, in denen Sie ein Python-Paket mit seinen Abhängigkeiten in ein RPM-Paket packen müssen.







Dieser Beitrag behandelt zwei Optionen: fpm und rpmvenv.







fpm ist ein Programm zum einfachen Packen von Programmen in rpm, deb und anderen Paketen.







rpmvenv ist ein Programm zum Packen von virtualenv-Programmen in rpm.







In beiden Fällen muss eine Datei require.txt erstellt werden.







Die Datei require.txt muss sich in demselben Verzeichnis befinden, in dem der Befehl zum Packen des Python-Pakets in das RPM-Paket ausgeführt wird.







Wenn Sie ein RPM-Paket erstellen und installieren, muss auf dem System ein Linux-Benutzerluftstrom vorhanden sein.







Teil 0. Erstellen der Datei require.txt







Wir werden es anhand des Apache-Airflow-Beispiels erstellen.







Installieren Sie RPM-Abhängigkeiten für den Apache-Luftstrom.







sudo yum install -y python3-devel python3-pip gcc gcc-c++ cyrus-sasl-devel krb5-devel
      
      





Installieren des Apache-Luftstroms mit PIP.







sudo pip3 install apache-airflow[postgres,redis,hdfs,hive,kerberos,ldap,ssh]==1.10.12 --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.6.txt"
      
      





In eckigen Klammern können Sie Python-Abhängigkeiten für den Apache-Luftstrom verwenden, die ebenfalls installiert werden müssen.







Nach der Installation von apache-airflow sehen wir uns die Liste der installierten Python-Pakete mit dem Befehl an.







pip3 freeze > requirements.txt
      
      





Teil 1. Verwenden von FPM







Teil 1.1. Versuch, das virtualenv-Modul während der Verwendung von FPM aufzurufen







Installieren Sie RPM-Abhängigkeiten für fpm.







sudo yum install -y ruby-devel gcc make rpm-build rubygems
      
      





Installieren Sie Python- und Ruby-Abhängigkeiten für fpm.







gem install --version 1.12.2 --user-install ffi
gem install --version 1.6.0 --user-install git
pip3 install --user virtualenv-tools 
      
      





Installieren Sie fpm.







gem install --no-document fpm
      
      





Erstellen Sie das Luftstrom-RPM-Paket mit dem virtualenv-Modul.







fpm  --verbose  -s virtualenv -t rpm --name airflow -v 1.10.12 --prefix /home/airflow requirements.txt
...
Successfully installed Babel-2.8.0 Flask-1.1.2 Flask-Admin-1.5.4 Flask-AppBuilder-2.3.4 Flask-Babel-1.0.0 Flask-Caching-1.3.3 Flask-JWT-Extended-3.24.1 Flask-Login-0.4.1 Flask-OpenID-1.2.5 Flask-SQLAlchemy-2.4.4 Flask-WTF-0.14.3 Jinja2-2.11.2 Mako-1.1.3 Markdown-2.6.11 MarkupSafe-1.1.1 PyHive-0.6.3 PyJWT-1.7.1 PyNaCl-1.4.0 PyYAML-5.3.1 Pygments-2.6.1 SQLAlchemy-1.3.19 SQLAlchemy-JSONField-0.9.0 SQLAlchemy-Utils-0.36.8 WTForms-2.3.3 Werkzeug-0.16.1 alembic-1.4.2 apache-airflow-1.10.12 apispec-1.3.3 argcomplete-1.12.0 argparse-1.4.0 attrs-19.3.0 bcrypt-3.2.0 cached-property-1.5.1 cattrs-1.0.0 certifi-2020.6.20 cffi-1.14.2 chardet-3.0.4 click-6.7 colorama-0.4.3 colorlog-4.0.2 configparser-3.5.3 croniter-0.3.34 cryptography-3.0 defusedxml-0.6.0 dill-0.3.2 dnspython-1.16.0 docutils-0.16 email-validator-1.1.1 flask-swagger-0.2.14 funcsigs-1.0.2 future-0.18.2 graphviz-0.14.1 gunicorn-20.0.4 hmsclient-0.1.1 idna-2.10 importlib-metadata-1.7.0 iso8601-0.1.12 itsdangerous-1.1.0 json-merge-patch-0.2 jsonschema-3.2.0 lazy-object-proxy-1.5.1 ldap3-2.8 lockfile-0.12.2 marshmallow-2.21.0 marshmallow-enum-1.5.1 marshmallow-sqlalchemy-0.23.1 natsort-7.0.1 numpy-1.19.1 pandas-1.1.0 paramiko-2.7.1 pendulum-1.4.4 prison-0.1.3 protobuf-3.13.0 psutil-5.7.2 psycopg2-binary-2.8.5 pyasn1-0.4.8 pycparser-2.20 pykerberos-1.2.1 pyrsistent-0.16.0 pysftp-0.2.9 python-daemon-2.2.4 python-dateutil-2.8.1 python-editor-1.0.4 python-nvd3-0.15.0 python-slugify-4.0.1 python3-openid-3.2.0 pytz-2020.1 pytzdata-2020.1 redis-3.5.3 requests-2.24.0 requests-kerberos-0.12.0 sasl-0.2.1 setproctitle-1.1.10 six-1.15.0 snakebite-2.11.0 sshtunnel-0.1.5 tabulate-0.8.7 tenacity-4.12.0 text-unidecode-1.3 thrift-0.13.0 thrift-sasl-0.4.2 typing-3.7.4.3 typing-extensions-3.7.4.2 tzlocal-1.5.1 unicodecsv-0.14.1 urllib3-1.25.10 zipp-3.1.0 zope.deprecation-4.4.0 {:level=>:info}
Traceback (most recent call last): {:level=>:info}
  File "/home/airflow/.local/bin/virtualenv-tools", line 11, in <module> {:level=>:info}
    load_entry_point('virtualenv-tools==1.0', 'console_scripts', 'virtualenv-tools')() {:level=>:info}
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 476, in load_entry_point {:level=>:info}
    return get_distribution(dist).load_entry_point(group, name) {:level=>:info}
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2700, in load_entry_point {:level=>:info}
    return ep.load() {:level=>:info}
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2318, in load {:level=>:info}
    return self.resolve() {:level=>:info}
  File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2324, in resolve {:level=>:info}
    module = __import__(self.module_name, fromlist=['__name__'], level=0) {:level=>:info}
  File "/home/airflow/.local/lib/python3.6/site-packages/virtualenv_tools.py", line 50 {:level=>:info}
    print 'A %s' % script_filename {:level=>:info}
               ^ {:level=>:info}
SyntaxError: Missing parentheses in call to 'print'. Did you mean print('A %s' % script_filename)? {:level=>:info}
Process failed: virtualenv-tools failed (exit code 1). Full command was:["virtualenv-tools", "--update-path", "/home/airflow"] {:level=>:error}
      
      





Issue .







1.2. dir FPM







RPM fpm virtualenv.







sudo yum install -y ruby-devel gcc make rpm-build rubygems git
sudo yum install -y python3-devel python3-pip gcc gcc-c++ cyrus-sasl-devel krb5-devel
sudo yum -y install epel-release rpmdevtools wget
      
      





Python Ruby fpm.







gem install --version 1.12.2 --user-install ffi
gem install --version 1.6.0 --user-install git
pip3 install --user virtualenv
      
      





fpm.







gem install --no-document fpm
      
      





virtualenv airflow.







mkdir -p /home/airflow/airflow
python3 -m venv airflow
source /home/airflow/airflow/bin/activate
      
      





airflow virtualenv .







python3 -m pip install apache-airflow[postgres,redis,hdfs,hive,kerberos,ldap,ssh]==1.10.12 --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-1.10.12/constraints-3.6.txt"
deactivate
      
      





deactivate virtualenv .







virtualenv airflow rpm .







fpm -s dir -t rpm -n airflow -v 1.10.12 --rpm-auto-add-directories --no-rpm-use-file-permissions --rpm-user airflow --rpm-group airflow --prefix /home/airflow/airflow -C /home/airflow/airflow
      
      





rpm . 3 airflow virtualenv .







2. RPMVENV







RPM rpmvenv virtualenv.







sudo yum install -y python3-devel python3-pip gcc gcc-c++ cyrus-sasl-devel krb5-devel
sudo yum -y install epel-release rpmdevtools wget
      
      





Python rpmvenv.







pip3 install --user virtualenv
      
      





fpm.







pip3 install --user rpmvenv
      
      





requirements.txt , rpmvenv.







rpmvenv .







echo "{}" > conf.json && \
LC_ALL=en_US.UTF-8 rpmvenv conf.json \
--core_name="apache-airflow" \
--core_version="1.10.12" \
--core_license="ASL 2.0" \
--core_summary="apache-airflow" \
--extensions_enabled="blocks,python_venv" \
--python_venv_name="apache-airflow" \
--python_venv_path="/home/airflow" \
--python_venv_strip_binaries="false" \
--blocks_desc="apache-airflow" \
--python_venv_require_setup_py="false" \
--file_permissions_user="airflow" \
--file_permissions_group="airflow"
      
      





rpm . 3 airflow virtualenv .







3. Python virtualenv







Installieren Sie apache-airflow-1.10.12-1.x86_64.rpm







sudo yum install -y apache-airflow-1.10.12-1.x86_64.rpm
      
      





Geben Sie virtualenv ein







source /home/airflow/apache-airflow/bin/activate
      
      





Luftstrom starten







airflow initdb
airflow webserver -p 8080
      
      





Beenden Sie nach Beendigung des Programms virtualenv







deactivate
      
      






All Articles