我怎样才能从 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
?
到目前为止我已经尝试过:
- apt on PyPI。奇怪的旧版本。
- vext。目前不支持apt。
- other things on PyPI that start with "apt"。 None 是
python3-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 不支持的其他包。
我写了一个 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
?
到目前为止我已经尝试过:
- apt on PyPI。奇怪的旧版本。
- vext。目前不支持apt。
- other things on PyPI that start with "apt"。 None 是
python3-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 不支持的其他包。