您尚未登录。

#16 2019-10-06 21:09:24

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

conda那个环境就是一个Python的virtual environment,也就相当于一个目录里面有Python和一堆lib,然后你activate环境的时候conda会帮你设置环境变量和Python启动选项,让里面的Python能在查找lib和binary的时候优先找环境里面的。然后在里面用pip也是一样的,不会把pypi包安装到外面。

但是你如果安装一部分不同版本的c编译套件在里面又不装全,那编译的时候一部分环境内找不到就会用系统的,一部分用的又是环境里的,版本不兼容就炸了。你直接在外面pip,没了conda activate帮你设定环境变量,你自己也不会设定,肯定就没装到环境里,那里面的Python肯定就找不到你安装的包了。

要么,别用conda或者任何虚拟环境,有系统软件包的装系统包,所以早告诉你从AUR装你又不会用。不装系统包那就pip --user装到用户家目录就好了。


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#17 2019-10-06 21:34:51

nano
会员
注册时间: 2019-10-05
帖子: 11

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

xtricman 说:

conda那个环境就是一个Python的virtual environment,也就相当于一个目录里面有Python和一堆lib,然后你activate环境的时候conda会帮你设置环境变量和Python启动选项,让里面的Python能在查找lib和binary的时候优先找环境里面的。然后在里面用pip也是一样的,不会把pypi包安装到外面。

但是你如果安装一部分不同版本的c编译套件在里面又不装全,那编译的时候一部分环境内找不到就会用系统的,一部分用的又是环境里的,版本不兼容就炸了。你直接在外面pip,没了conda activate帮你设定环境变量,你自己也不会设定,肯定就没装到环境里,那里面的Python肯定就找不到你安装的包了。

要么,别用conda或者任何虚拟环境,有系统软件包的装系统包,所以早告诉你从AUR装你又不会用。不装系统包那就pip --user装到用户家目录就好了。

感谢你这么详细的解释,但是我全程使用pip都是在conda的虚拟环境下,一直没有成功。甚至直到百合仙子告诉我退出来虚拟环境后用系统的gcc编译后我才知道可以使用

conda deactivate

这条指令退出虚拟环境。。

现在我本来打算根据仙子的建议把编译好的包拷进我的conda里面,但是我刚刚又编译了一遍不知道为什么就崩了,在系统环境下的python也没法使用了,,我想了想感觉自己这一通瞎折腾确实把整个系统都搞得挺乱的,我决定重装一下系统,按你和yw662大佬说的在虚拟环境中pip装一下试试,如果不行的话再按仙子说的编译好后丢进去。

谢谢各位大佬的帮助!

离线

#18 2019-10-06 21:44:12

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

那你连conda都不会用你装anaconda干什么了?Virtual Environment本来就是个大多数人都不需要的功能。pip直接装到家目录就行了,os的用户管理天生就是个隔离环境,直接pip --user就好了。你根本没有管理多个虚拟环境的需求也去搞什么虚拟环境?


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#19 2019-10-06 22:01:46

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,960
个人网站

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

xtricman 说:

那你连conda都不会用你装anaconda干什么了?Virtual Environment本来就是个大多数人都不需要的功能。pip直接装到家目录就行了,os的用户管理天生就是个隔离环境,直接pip --user就好了。你根本没有管理多个虚拟环境的需求也去搞什么虚拟环境?

呃,pip --user 更糟糕的,因为那样是混合环境。而默认情况下虚拟环境是隔离所有 Python 库的。

而且 pip --user 会影响系统安装的程序,造成更多的问题。

离线

#20 2019-10-06 22:31:07

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

依云 说:

呃,pip --user 更糟糕的,因为那样是混合环境。而默认情况下虚拟环境是隔离所有 Python 库的。

而且 pip --user 会影响系统安装的程序,造成更多的问题。

pip --user怎么会影响系统安装的程序呢?家目录安装的包会导致import的时候优先于/usr下的包被导入么?这种用户执行时家目录下的软件版本覆盖系统级软件软件版本不是不正好是需要的行为么?虚拟环境是,很多套环境,每套环境软件包,版本完全不一样,需要来回切换才用的啊。

最近编辑记录 xtricman (2019-10-06 22:49:43)


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#21 2019-10-07 00:33:36

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,960
个人网站

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

xtricman 说:
依云 说:

呃,pip --user 更糟糕的,因为那样是混合环境。而默认情况下虚拟环境是隔离所有 Python 库的。

而且 pip --user 会影响系统安装的程序,造成更多的问题。

pip --user怎么会影响系统安装的程序呢?家目录安装的包会导致import的时候优先于/usr下的包被导入么?这种用户执行时家目录下的软件版本覆盖系统级软件软件版本不是不正好是需要的行为么?虚拟环境是,很多套环境,每套环境软件包,版本完全不一样,需要来回切换才用的啊。

不是。pacman 安装的软件当然会依赖它所依赖的库的版本。用户如果 pip --user 安装了更低或者更高的版本都可能造成行为异常。甚至有时候 pacman 安装的版本为了修正某些问题而打了补丁的。

虚拟环境是需要来回切换没错,所以我能不用就不用。另外这种虚拟环境你也可以直接指定虚拟环境里的解释器来执行脚本,而不需要手动在 shell 里 source 激活脚本。

当然,系统安装的解释器,或者虚拟环境所依赖的系统库升级到不兼容的版本,所有虚拟环境都会坏掉。

离线

#22 2019-10-07 01:30:36

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

依云 说:

不是。pacman 安装的软件当然会依赖它所依赖的库的版本。用户如果 pip --user 安装了更低或者更高的版本都可能造成行为异常。甚至有时候 pacman 安装的版本为了修正某些问题而打了补丁的。

虚拟环境是需要来回切换没错,所以我能不用就不用。另外这种虚拟环境你也可以直接指定虚拟环境里的解释器来执行脚本,而不需要手动在 shell 里 source 激活脚本。

当然,系统安装的解释器,或者虚拟环境所依赖的系统库升级到不兼容的版本,所有虚拟环境都会坏掉。

我的意思是pip --user直接当成二级包管理器用。毕竟pypi上有各种其实完全不Python的玩意儿。用户既然选择在家目录安装软件,那么overwrite系统软件就是一个intended行为,由此造成的依赖破坏也要由用户自己负责。(就是系统级的app原来使用系统自己的lib现在使用家目录的lib, 然后其实家目录下的lib是有问题的)。所以,我说的pip --user是说系统包管理器无法获取某个软件的时候使用pip --user来补充,或者在明确知晓overwrite后果的情况下去overwrite。这正是二级包管理器要实现的目标。

我这里想说的是家目录作为一个二级包管理器工作区的情形,不一定要是Python包,可以是任何软件。我说的激活就是tweak一些环境变量(好吧,Python解释器可能还需要tweak一下启动时的命令行参数或者配置文件啥的)使得某些软体的依赖查找被优先redirect到家目录来。比方说把家目录下的bin目录添加到PATH前面,lib添加到LD_LIBRARY_PATH前面,修改用户的默认shell为家目录里的shell,改掉启动脚本的读取路径啦之类的。

最近编辑记录 xtricman (2019-10-07 01:53:31)


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

#23 2019-10-07 05:59:03

yw662
大会员
所在地: localhost
注册时间: 2018-10-10
帖子: 424

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

这个是这样,如果完全不用pacman管理python相关的依赖,那么pip --user就和虚拟环境没什么区别了。但是如果有些系统库依赖python相关的依赖的话就可能会影响到虚拟环境。

楼上这个用法还是混用,虽然说--user下面可以共用系统的库,但我觉得还是容易出问题的。

其实不如用docker好了:-)


ecmascript是世界上最好的语言

离线

#24 2019-10-07 06:01:54

yw662
大会员
所在地: localhost
注册时间: 2018-10-10
帖子: 424

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

不过xtricman你这个玩法是抄袭rust的吧:-)


ecmascript是世界上最好的语言

离线

#25 2019-10-07 08:24:07

xtricman
エクス·トリクマン
注册时间: 2012-12-26
帖子: 1,267

Re: [新手求助]在安装python-rtmidi包时,提示Failed building wheel for python-rtmidi

yw662 说:

其实不如用docker好了:-)

docker之类的容器太重了,改改环境变量就能控制的事情没必要用namespace来让内核强行限制。

其实最好的是全局的multi version。nix那种。但是大量软件强行依赖FHS导致效果不好。

其实要是所有软件好好写,完全可以做到自由好看的multi version。搞个/Applications,每个软件包(包括系统基础包)在里面占一个目录,由名字和版本号构成,然后再来一个/home(noexec),每个用户(包括root,用于全局数据存储)在里面占一个目录。加上/proc /sys /dev,还要什么自行车。

引入一个Installer系统服务来transaction软体安装。

当然docker方案就不需要改啥子目录结构了,反正系统目录结构怎么样对docker化软件来说都是一样的…自带全套依赖库…

最近编辑记录 xtricman (2019-10-07 08:54:36)


反社会,精神极其不稳定,随时可能炸碎身边所有人

离线

页脚