我怎样才能从 virtualenv 中 "import apt"?

How can I "import apt" from within a virtualenv?

我写了一个 Python 实用程序脚本,它依赖于 Debian 软件包 python3-apt:

import apt

...

def get_packages():
    cache = apt.Cache()
    for pkg in cache:
        if pkg.installed and pkg.name in PACKAGE_LIST:
            yield pkg.name

我现在正在将脚本扩展到一个项目中,最终目的是将其作为 Debian 软件包本身在 PyPI and/or 上可用。

我使用 virtualenvs 来隔离我的 Python 开发环境。我需要将什么包名称(或路径)添加到我的 virtualenv 以便我可以从该环境中调用 import apt

到目前为止我已经尝试过:

您可以使用 pipenv 实现这一点,如下所示(类似的说明应该适用于其他 venv 管理器):

pipenv --site-packages  # see note 1
PIP_IGNORE_INSTALLED=1 pipenv install  # see note 2

您更有可能运行认为:

pipenv --site-packages
PIP_IGNORE_INSTALLED=1 pipenv install -e . --dev
# treats codebase as a package, also installs dev dependencies

注意 1: 我们必须访问系统包(又名站点包)以便我们可以 import apt

注 2: ...但我们更喜欢 virtualenv 包而不是系统包。看 https://pipenv.pypa.io/en/latest/advanced/#working-with-platform-provided-python-components 了解详情。

评论:

  • 这意味着所有未在您的 Pipfile 中定义的 other 系统包在您的 venv 中也可用。您必须记住,使用相同代码库的其他开发人员不一定可以使用它们。如果你有一个基本的 CI 环境,它应该能捕捉到这个。

  • 此方法适用于 vext 不支持的其他包。