web-dev-qa-db-ja.com

python-aptAPIを使用してパッケージをインストールする方法

私はPythonに関してはかなり初心者なので、事前に許しを請います:)。そうは言っても、私は、とりわけ、いくつかのLinuxパッケージをインストールするスクリプトを作成しようとしています。最初に説明したようにサブオープンを使おうとしました ここ 。これは最終的には機能しますが、私は python-apt API に出くわしました。私は大ファンではないか、車輪の再発明をしていないので、試してみることにしました。

Python-aptを使用してパッケージをインストールする際の例/チュートリアルを見つけようとすると問題が発生します。ドキュメントを検索すると、パッケージをインストールするためのいくつかのメソッドを持つ PackageManager クラスが見つかりました。私はこれを機能させるためにいくつかの簡単なコードを試しました:

apt_pkg.PackageManager.install("python")

これは簡単には機能しないようです。installメソッドはプレーンな文字列ではなくapt_pkg.PackageManagerを想定しています。したがって、もう少し見てみると、 この例を見つけました これは有望に見えますが、そこで何が起こっているのか本当に理解していないので、使用するのは少し気が進まないです。

次に、誰かがpython-aptを使用してパッケージをインストールしようとしましたか、それとも昔ながらのサブオープンスタイルを使用する必要がありますか?

ありがとう!

16
AlejandroVK

_python-apt_ Debianパッケージのaptモジュールを使用することをお勧めします。これは、基盤となるC/C++ _libapt-xxx_ライブラリの上位レベルのラッパーであり、Pythonicインターフェイスを備えています。

_libjs-yui-doc_パッケージをインストールするスクリプトの例を次に示します。

_#!/usr/bin/env python
# aptinstall.py

import apt
import sys

pkg_name = "libjs-yui-doc"

cache = apt.cache.Cache()
cache.update()
cache.open()

pkg = cache[pkg_name]
if pkg.is_installed:
    print "{pkg_name} already installed".format(pkg_name=pkg_name)
else:
    pkg.mark_install()

    try:
        cache.commit()
    except Exception, arg:
        print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))
_

_apt-get_の使用と同様に、これはAPTキャッシュにアクセスして変更するには、スーパーユーザー権限で実行する必要があります。

_$ Sudo ./aptinstall.py
_

より大きなスクリプトの一部としてパッケージのインストールを試みている場合は、必要最小限の時間だけroot権限に昇格することをお勧めします。

GTKフロントエンドを使用してパッケージをインストールする方法を示す/usr/share/pyshared/apt/progress/gtk2.py:_test()関数に小さな例があります。

32
Austin Phillips