这是可能的,当然。
例如 - 我可以像这样下载 python-dbus: $ sudo apt-get download python-dbus
但是接下来我应该做什么,在我当前的 virtualenv 中使用这个 .deb 包?
这是可能的,当然。
例如 - 我可以像这样下载 python-dbus: $ sudo apt-get download python-dbus
但是接下来我应该做什么,在我当前的 virtualenv 中使用这个 .deb 包?
如果你真的需要这样做,你可以将全局安装的文件直接复制到你的 virtualenv 中。例如,我无法让 pycurl 工作,因为没有安装所需的库,但是安装apt-get install python-pycurl
了。所以我做了以下事情:
sudo apt-get install python-pycurl
cp /usr/lib/python2.7/dist-packages/pycurl* ~/.virtualenvs/myenv/lib/python2.7/site-packages/
安装说它正在将它添加到/usr/lib/python2.7。因此,在查看了将它们复制到我的 virtualenv 中的文件之后,我在该目录中查找了带有 pycurl 的站点包或 dist 包。您还必须将任何可执行文件从 bin 复制到 virtualenv 的 bin 目录中。
此外,pip install -r requirements.txt
在那里运行一个成功找到的 pycurl 并跳过它,就好像我通过 pip 安装它一样。
你为什么想做这个?重点是避免做那样的事情......
virtualenv whatever
cd whatever
bin/pip install dbus-python
您还可以选择指定--no-site-packages
tovirtualenv
以使其更加独立。
首先安装 dbus 开发库(你可能需要一些其他的开发库,但这就是我所需要的)
sudo apt-get install libdbus-1-dev libdbus-glib-1-dev
接下来,激活您的 virtualenv,运行以下命令。它会失败,但没关系。
pip install dbus-python
最后,进入您的 virtualenv 的构建目录并以非 Python 方式安装它。
cd $VIRTUAL_ENV/build/dbus-python
chmod +x configure
./configure --prefix=$VIRTUAL_ENV
make
make install
另一种解决方案是全局安装,然后允许 virtualenv 能够看到它。例如,假设我们要为 Python 3 安装 matplotlib:
sudo apt update
# 先更新sudo apt install python3-matplotlib
# 全局安装sudo pip3 install -U virtualenv
# 使用 pip3 为 Python 3 安装 virtualenvvirtualenv --system-site-packages -p python3 ./venv
#system-site-packages 选项允许 venv 查看所有全局包,包括 matplotlibsource ./venv/bin/activate
#激活 venv 以在 virtualenv 中使用 matplotlibdeactivate
# 在你使用完 virtualenv 之前不要退出要在现有虚拟环境中包含系统站点包,请打开配置文件:
<PATH_TO_YOUR_VENV_FOLDER>/pyvenv.cfg
并更改false
为true
include-system-site-packages
include-system-site-packages = true
保存并重新加载您的虚拟环境。
(在 Raspbian GNU/Linux 10(buster)上使用 virtualenv 20.2.2 进行测试,以将安装了 apt 的 python3-pyqt5 拉入我的虚拟环境中)
如果是针对新环境@Joshua Kan使用带有命令的标志的答案可能就是您想要的。--system-site-packages
venv