带有前缀的不一致的python包安装位置

时间:2018-06-14 12:51:51

标签: python setup.py

我正在安装带前缀的python包,并收到以下错误。

export PYTHONPATH=/home/user/some_prefix/lib64/python3.4/site-packages:$PYTHONPATH

当然我可以$ python3 -c "import distutils.sysconfig as sc; print(sc.get_python_lib(prefix=\"$HOME/some_prefix\"));" /home/user/some_prefix/lib/python3.4/site-packages 。但鉴于路径有python版本,我从How do I find the location of my Python site-packages directory?

找到了一种奇特的方式
lib

不幸的是,它们在/部分不匹配,除了可忽略不计的尾随$ python3 setup.py install --prefix=$HOME/some_prefix running install You are attempting to install a package to a directory that is not on PYTHONPATH and which Python does not read ".pth" files from. The installation directory you specified (via --install-dir, --prefix, or the distutils default setting) was: /home/user/some_prefix/lib64/python3.4/site-packages/ and your PYTHONPATH environment variable currently contains: '/home/user/some_prefix/lib/python3.4/site-packages' 。所以它仍然失败。

$ python3 -c "import distutils.sysconfig as sc; print(sc.get_python_lib(\"A\", \"B\", \"C\"));"
C/lib64/python3.4

现在,我该如何正确匹配呢?

我检查了文档,但我认为没有相关的论点。

https://docs.python.org/3/distutils/apiref.html#module-distutils.sysconfig distutils.sysconfig.get_python_lib([plat_specific [,standard_lib [,prefix]]])¶

/usr/lib

另外,哪一个是对的?是lib还是lib64?我在$ ll /usr/lib/python3.4/site-packages/ | wc 70 554 5408 $ ll /usr/lib64/python3.4/site-packages/ | wc 11 82 764 中看到了更多的包。

$ uname -a
Linux localhost 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
$ which python3
/usr/bin/python3
$ python3 --version
Python 3.4.8

我正在使用来自centos 7的标准python。

$bootstrap-sass-asset-helper: false;
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
$icon-font-name: "glyphicons-halflings-regular";

1 个答案:

答案 0 :(得分:1)

Fedora / CentOS patches various Python module更改安装位置,请参阅this ServerFault post on the difference between /usr/lib and /usr/lib64

请注意,jQuery(document).ready(function(){ jQuery('#modal_id').modal(); jQuery(document).ready(function(){ jQuery('#modal_id').modal('open'); }); }); 路径仅用于平台特定代码,而不适用于纯python库。因此,使用正确的方法是将plat_specific argument to get_python_lib()(第一个)设置为/usr/lib64

True

但是,如果您的目标前缀目录是用于没有Fedora / CentOS补丁的单独的Python安装,那么您应该真正使用在该前缀中安装的Python二进制文件处理安装:

$ python3 -c "import distutils.sysconfig as sc; print(sc.get_python_lib(True, prefix=\"$HOME/some_prefix\"))"

它将提供所有正确的系统配置,包括未修补的$HOME/some_prefix/bin/python3 setup.py install distutils模块,其中包含正确的本地sysconfig值,而不是$PREFIX将发出警告。

如果您想要从系统安装中隔离软件包,请使用virtualenv并使用特定于环境的Python二进制文件进行安装:

PYTHONPATH