max*_*axm 231 python pip package-managers easy-install
我对python包安装过程感到有点恼火.具体来说,dist-packages目录中安装的软件包与site-packages目录之间的区别是什么?
jte*_*ace 217
dist-packages是一种特定于Debian的约定,它也存在于其衍生产品中,如Ubuntu.当模块从Debian软件包管理器进入此位置时,模块将安装到dist-packages:
/usr/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)
由于easy_install并且pip是从包管理器安装的,它们也使用dist-packages,但是它们将包放在这里:
/usr/local/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)
dist-packages而不是site-packages.从Debian软件包安装的第三方Python软件进入dist-packages,而不是site-packages.这是为了减少系统Python与您可能手动安装的任何源代码Python构建之间的冲突.
这意味着如果从源手动安装Python,它将使用site-packages目录.这允许您将两个安装分开,特别是因为Debian和Ubuntu依赖于许多系统实用程序的Python系统版本.
use*_*610 13
Debian(和 Ubuntu)引入了自己的约定
# python3 -m site
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu Focal 上给出
sys.path = [
'/qpid-dispatch',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python3.8/site-packages' (doesn't exist)
ENABLE_USER_SITE: True
Run Code Online (Sandbox Code Playgroud)
正如链接的邮件列表中所述,约定是由分发包管理器安装的 python deb 包进入 go into并使用go into/usr/lib/python3/dist-packages安装的包。sudo pip3/usr/local/lib/python3.8/dist-packages
如果您编译并安装自己的 Python 解释器,它将默认将自身放置在 中/usr/local,而/usr/local/bin/pip3安装将进入/usr/local/lib/pythonX.Y/site-packages.
Debian 约定的要点是将三组软件包分开:
apt/usr/bin/pip3/usr/local/bin/pip3dist-packages是 debian 特定目录apt和朋友安装他们的东西,并且site-packages是标准pip目录。
问题是——当同一个包的不同版本存在于不同的目录中时会发生什么?
我对这个问题的解决方案是建立dist-packages一个符号链接site-packages:
for d in $(find $WORKON_HOME -type d -name dist-packages); do
pushd $d
cd ..
if test -d dist-packages/__pycache__; then
mv -v dist-packages/__pycache__/* site-packages/__pycache__/
rmdir -v dist-packages/__pycache__
fi
mv -v dist-packages/* site-packages/
rmdir -v dist-packages
ln -sv site-packages dist-packages
popd
done
Run Code Online (Sandbox Code Playgroud)
(如果您不使用 gnu 工具,请删除该-v选项)。
| 归档时间: |
|
| 查看次数: |
72203 次 |
| 最近记录: |