w***g 发帖数: 5958 | 1 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得
加上软件版本号,最好把package全都下到本地。
我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了,
theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。 |
h*i 发帖数: 3446 | 2 这就是为啥企业用Java。
用docker就得每个东东都具体到版本号吧,都用latest的话, 还用docker干嘛?
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
w***g 发帖数: 5958 | 3 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有
java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包,
不还得一堆依赖问题?
【在 h*i 的大作中提到】 : 这就是为啥企业用Java。 : 用docker就得每个东东都具体到版本号吧,都用latest的话, 还用docker干嘛?
|
a****a 发帖数: 5763 | 4
python有 env 吧,可以多版本并存
【在 w***g 的大作中提到】 : 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有 : java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包, : 不还得一堆依赖问题?
|
d********g 发帖数: 10550 | 5 一看就是没做过CI的……
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
d********g 发帖数: 10550 | 6 (venv)$ pip freeze > requirements.txt
喷之前可不可以Google下蛤蛤
【在 w***g 的大作中提到】 : 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有 : java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包, : 不还得一堆依赖问题?
|
t**r 发帖数: 3428 | |
h*i 发帖数: 3446 | 8 其实Java也不能完全避免版本依赖问题,不过Java毕竟就一个标准的虚拟机,而且是向
下兼容性很好,依赖问题比任何native技术都要少太多了。Java在企业应用上的支配地
位不是白来的。
【在 w***g 的大作中提到】 : 自己混的没人教,这种事情都是吃过亏了才知道。不过python应该没有 : java那种版本系统,无法做到多版本并存吧。这样哪天要装一个新的包, : 不还得一堆依赖问题?
|
d*******r 发帖数: 3299 | 9 "dockerfile reproduce" 你是指每次重新build一下以前的dockerfile来做image么?
为什么不直接存 docker image, push到public/private docker registry里,
然后每次用的时候 pull 下来?
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
L****8 发帖数: 3938 | 10 我用这个 https://www.continuum.io
多个版本python并存 感觉很好用
https://www.continuum.io/blog/developer-blog/anaconda-and-docker-better-
together-reproducible-data-science
docker 学习了半天 感觉还是得手动配置dockerfile
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
|
|
h*i 发帖数: 3446 | 11 对大多数老百姓,docker最主要的好处,就是可以直接用别人的image,不用自己装了
,试用各种高大上的服务器软件的壁垒被降低了很多。大多数人没这个精力和经验去成
功装好这些东西。VM又太笨重,所以docker就火了。
【在 L****8 的大作中提到】 : 我用这个 https://www.continuum.io : 多个版本python并存 感觉很好用 : https://www.continuum.io/blog/developer-blog/anaconda-and-docker-better- : together-reproducible-data-science : docker 学习了半天 感觉还是得手动配置dockerfile
|
a*****e 发帖数: 1700 | 12 彻底解决依赖与软件配置问题,Nix 或者 NixOS,你值得拥有! |
k****i 发帖数: 101 | 13 不指定那只能用default
天下乌雅一般黑
:好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了,
:全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 |
w***g 发帖数: 5958 | 14 你这个我早用过。但是这个不是写dockerfile的common practice。
照喷不误。
证据如下:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker
/Dockerfile
过几年再来make这个dockerfile,很可能也会失败。
【在 d********g 的大作中提到】 : (venv)$ pip freeze > requirements.txt : 喷之前可不可以Google下蛤蛤
|
s***o 发帖数: 2191 | 15 你是因为一定要用docker所以才用docker,还是docker的确帮你解决了很多问题? |
w********m 发帖数: 1137 | 16 storage贵,带宽也贵
【在 d*******r 的大作中提到】 : "dockerfile reproduce" 你是指每次重新build一下以前的dockerfile来做image么? : 为什么不直接存 docker image, push到public/private docker registry里, : 然后每次用的时候 pull 下来?
|
w***g 发帖数: 5958 | 17 docker有一个非常重要的好处,就是保存的不光是一个image,而且保留了
产生这个image的recipe。另外docker用起来也比较方便。
还有,nvidia-docker能够包装GPU。
至于省资源,这个也好,但是我觉得不是决定性因素。
【在 s***o 的大作中提到】 : 你是因为一定要用docker所以才用docker,还是docker的确帮你解决了很多问题?
|
N*****m 发帖数: 42603 | 18 你也是老鸟了。你不搞版本控制?
每个源代码的版本对应一个docker image的版本。
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
N*****m 发帖数: 42603 | 19 因为他们有版本控制啊
https://hub.docker.com/r/tensorflow/tensorflow/tags/
当然无所谓
docker
【在 w***g 的大作中提到】 : 你这个我早用过。但是这个不是写dockerfile的common practice。 : 照喷不误。 : 证据如下: : https://github.com/tensorflow/tensorflow/blob/master/tensorflow/tools/docker : /Dockerfile : 过几年再来make这个dockerfile,很可能也会失败。
|
N*****m 发帖数: 42603 | 20 自己local开一个,docker registry自己就有image,在nas上跑一个好了。
【在 w********m 的大作中提到】 : storage贵,带宽也贵
|
|
|
w***g 发帖数: 5958 | 21 我没说清。你看Dockerfile里这一行:
RUN pip --no-cache-dir install \
ipykernel \
jupyter \
matplotlib \
numpy \
scipy \
sklearn \
pandas \
Pillow \
&& \
python -m ipykernel.kernelspec
所有用pip装的包都不带版本号。比如sklearn以后升级了换了API,
那么这个Dockerfile就废了。
我觉得版本控制解决不了这个问题。请帮我看一眼。
【在 N*****m 的大作中提到】 : 因为他们有版本控制啊 : https://hub.docker.com/r/tensorflow/tensorflow/tags/ : 当然无所谓 : : docker
|
N*****m 发帖数: 42603 | 22 我是说,docker image带版本tags。
所以他们用latest package不行也没关系,rollback到上一个image就行了。
当然,我自己写Dockerfile,里面都带版本的。
【在 w***g 的大作中提到】 : 我没说清。你看Dockerfile里这一行: : RUN pip --no-cache-dir install \ : ipykernel \ : jupyter \ : matplotlib \ : numpy \ : scipy \ : sklearn \ : pandas \ : Pillow \
|
w***g 发帖数: 5958 | 23 我们后来的解决办法就是虽然dockerfile废了,但是image还在,
所以直接from那个image接着改。是不是就是这个意思?
【在 N*****m 的大作中提到】 : 我是说,docker image带版本tags。 : 所以他们用latest package不行也没关系,rollback到上一个image就行了。 : 当然,我自己写Dockerfile,里面都带版本的。
|
N*****m 发帖数: 42603 | 24 对的。这也是docker的好处之一。
【在 w***g 的大作中提到】 : 我们后来的解决办法就是虽然dockerfile废了,但是image还在, : 所以直接from那个image接着改。是不是就是这个意思?
|
n******7 发帖数: 12463 | 25 但是这样别人无法reproduce你的image
这对别人就是个黑箱了
【在 N*****m 的大作中提到】 : 对的。这也是docker的好处之一。
|
N*****m 发帖数: 42603 | 26 本来就是直接拿image用的。
最好还是在源码里加版本。
【在 n******7 的大作中提到】 : 但是这样别人无法reproduce你的image : 这对别人就是个黑箱了
|
m***b 发帖数: 30 | 27 python 不是很熟
pip dependency 放到 requirements.txt 里, 不能加上版本号?
这个不是 docker 的问题,是 pip 的问题。
【在 w***g 的大作中提到】 : 我没说清。你看Dockerfile里这一行: : RUN pip --no-cache-dir install \ : ipykernel \ : jupyter \ : matplotlib \ : numpy \ : scipy \ : sklearn \ : pandas \ : Pillow \
|
N*****m 发帖数: 42603 | 28 卫东的意思是这个Dockerfile写得不好。
其实卫东可以docker exec到上一个版本的tensorflow,用pip freeze拿到各个package
的版本号
【在 m***b 的大作中提到】 : python 不是很熟 : pip dependency 放到 requirements.txt 里, 不能加上版本号? : 这个不是 docker 的问题,是 pip 的问题。
|
r***y 发帖数: 4379 | 29 不能同意更多
dev, test 环境一致避免扯皮是另一个主要好处
product 环境也保持一致的项目也见过不少
【在 h*i 的大作中提到】 : 对大多数老百姓,docker最主要的好处,就是可以直接用别人的image,不用自己装了 : ,试用各种高大上的服务器软件的壁垒被降低了很多。大多数人没这个精力和经验去成 : 功装好这些东西。VM又太笨重,所以docker就火了。
|
d*******r 发帖数: 3299 | 30 我一直觉得只有用image是标准的可靠方法,dockerfile当辅助文档用.
怕操作image太慢太大, 自己就做个private的docker registry. |
|
|
i******e 发帖数: 24 | 31 pip 能控制版本号吧。
容我喷一句:
这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。
【在 w***g 的大作中提到】 : 我没说清。你看Dockerfile里这一行: : RUN pip --no-cache-dir install \ : ipykernel \ : jupyter \ : matplotlib \ : numpy \ : scipy \ : sklearn \ : pandas \ : Pillow \
|
w**z 发帖数: 8232 | 32 这种故事天天都在发生。
【在 i******e 的大作中提到】 : pip 能控制版本号吧。 : 容我喷一句: : 这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。
|
l*******m 发帖数: 1096 | 33 是的。pip install pkg==version
【在 i******e 的大作中提到】 : pip 能控制版本号吧。 : 容我喷一句: : 这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。
|
n*****3 发帖数: 1584 | 34 大牛 all 不愿意仔细看文档。
【
在 inorange (orange) 的大作中提到: 】 |
w***g 发帖数: 5958 | 35 我知道requirements.txt。但是我以前用requirements.txt装软件的时候也
碰到过坑。 比如这个
https://github.com/aaalgo/centos7-deep
现在很可能就跑不起来。而pip install pkg==version又很麻烦,因为开发的时候
肯定是对着当前版本开发的,只是测试完了需要记一下当前的版本号。
我觉得可能还真是只有存image是最靠谱的做法。毕竟pip install网上的东西还是
有可能失败。
【在 l*******m 的大作中提到】 : 是的。pip install pkg==version
|
d********g 发帖数: 10550 | 36 最简单的道理:做开发和部署稳定不稳定其实不是最重要问题。最重要的问题是需要一
个可预测的环境,也就是可重现的环境。有了可预测和重现的环境才能谈稳定不稳定,
否则都是扯蛋
整个生态系统有各种不同的方案。OS级别各种有release的distro是一种方案,把OS放
VPS做成OS image是一种方案,再细化一点Docker这样的container做到app image也是
一种方案
在app级别,pip是所谓“源码级”锁定。有不少requirements.txt只写了最直接的lib
,dependencies都不管,这样的锁定是锁了白锁
你说的这些所谓坑在正经的公司都不是什么问题,这些都是infra/ops天天干的事情。
pip install也不会从网上直接download,CI的build可以先下到cache再一起打包,部
署的时候都是从local取不需要走网络,减少出错可能性。当然直接用Docker更容易
Docker这样的傻瓜工具好是好,但一定要建立在知其然的基础上,否则更坑。为啥我一
直推Arch Linux和FreeBSD?能搞定Arch Linux的人绝对不会在Ubuntu这种大路货上踩
坑,而体验过FreeBSD这种base和app清晰分离架构的人再也不愿意回到大多数有所谓
release系统但是什么乱七八糟都一锅炖的Linux distro的恶心世界里。CentOS更是垃
圾得不能再垃圾的末流货
【在 w***g 的大作中提到】 : 我知道requirements.txt。但是我以前用requirements.txt装软件的时候也 : 碰到过坑。 比如这个 : https://github.com/aaalgo/centos7-deep : 现在很可能就跑不起来。而pip install pkg==version又很麻烦,因为开发的时候 : 肯定是对着当前版本开发的,只是测试完了需要记一下当前的版本号。 : 我觉得可能还真是只有存image是最靠谱的做法。毕竟pip install网上的东西还是 : 有可能失败。
|
d*******r 发帖数: 3299 | 37 从大牛对 Arch Linux, FreeBSD, Linux distro, CentOS 的评价来看
你是控制狂,哈哈哈... 像我等整不动 Arch 的菜鸟, 还是继续用 ubuntu 算了...
没想到对 FreeBSD 一支的评价这么高.
不过它协议好, 所以有些公司用在自己device上, 比如Mac,还有有些NAS
lib
【在 d********g 的大作中提到】 : 最简单的道理:做开发和部署稳定不稳定其实不是最重要问题。最重要的问题是需要一 : 个可预测的环境,也就是可重现的环境。有了可预测和重现的环境才能谈稳定不稳定, : 否则都是扯蛋 : 整个生态系统有各种不同的方案。OS级别各种有release的distro是一种方案,把OS放 : VPS做成OS image是一种方案,再细化一点Docker这样的container做到app image也是 : 一种方案 : 在app级别,pip是所谓“源码级”锁定。有不少requirements.txt只写了最直接的lib : ,dependencies都不管,这样的锁定是锁了白锁 : 你说的这些所谓坑在正经的公司都不是什么问题,这些都是infra/ops天天干的事情。 : pip install也不会从网上直接download,CI的build可以先下到cache再一起打包,部
|
d********g 发帖数: 10550 | 38 CentOS这种垃圾系统的逻辑很有问题
默认repo软件不够多 ==> 开3rd-party repo / 自己编译 ==> 不就好了?
这尼玛啥都要自己编译了裸装野包了,还谈屁的安全和稳定。distro的意义就在于系统
性的打包和测试,同时很重要一点,系统一定是可预测和可重现的。一旦有野包进入系
统就白瞎了,况且小白太多,质量实在不忍直视
CentOS就是Linux界最大的笑话。RHEL不同是人家有付费支持,花钱消灾
Linux distro里Arch Linux的wiki质量最高。AUR这种社区混血包都甩CentOS/Debian/
Ubuntu的第三方野包几万条街
FreeBSD真是极乐世界。FreeBSD从发行模式上来说就是*nix界的Windows,OS和app分离
【在 d*******r 的大作中提到】 : 从大牛对 Arch Linux, FreeBSD, Linux distro, CentOS 的评价来看 : 你是控制狂,哈哈哈... 像我等整不动 Arch 的菜鸟, 还是继续用 ubuntu 算了... : 没想到对 FreeBSD 一支的评价这么高. : 不过它协议好, 所以有些公司用在自己device上, 比如Mac,还有有些NAS : : lib
|
w***g 发帖数: 5958 | 39 我用过差不多两年arch。后来有一次更新了以后整个系统都破了。
人到了一定岁数,就不想折腾了。我现在想得就是怎么搞点deep
learning技术卖点钱,最近连目录都懒得整理了。Docker这种
东西,说实在不是来钱的那个技术层次,如果不是有immediate
needs,不值得细看。
我真正在意的核心技术,都是编译成一个static binary,放任何
2.6以上的linux上都能跑。windows 10也能跑。
【在 d*******r 的大作中提到】 : 从大牛对 Arch Linux, FreeBSD, Linux distro, CentOS 的评价来看 : 你是控制狂,哈哈哈... 像我等整不动 Arch 的菜鸟, 还是继续用 ubuntu 算了... : 没想到对 FreeBSD 一支的评价这么高. : 不过它协议好, 所以有些公司用在自己device上, 比如Mac,还有有些NAS : : lib
|
d********g 发帖数: 10550 | 40 你的需求就是一个可预测可重现的环境。Docker不是你这样用的,你把Docker用成了
script而已。换成类似的例子,好比你发布产品直接发布源码,然后抱怨不能跨平台,
不是每个用户拿去都能编译过
【在 w***g 的大作中提到】 : 我用过差不多两年arch。后来有一次更新了以后整个系统都破了。 : 人到了一定岁数,就不想折腾了。我现在想得就是怎么搞点deep : learning技术卖点钱,最近连目录都懒得整理了。Docker这种 : 东西,说实在不是来钱的那个技术层次,如果不是有immediate : needs,不值得细看。 : 我真正在意的核心技术,都是编译成一个static binary,放任何 : 2.6以上的linux上都能跑。windows 10也能跑。
|
|
|
c*********e 发帖数: 16335 | 41 ubuntu也是这样的,提示你要不要upgrade,手滑点了yes,马上就把php version, mysql
version都给upgrade了。灾难来了,很多东西都变了,有的不支持了,有的出错了。
。。
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
a*****e 发帖数: 1700 | 42 重要的事情说三遍:
Deterministic software configuration is a solved problem.
Reproducible Linux environment is a solved problem.
System upgrade with rollbacks is a solved problem.
答案就是 Nix 或者 NixOS.
【在 d********g 的大作中提到】 : 你的需求就是一个可预测可重现的环境。Docker不是你这样用的,你把Docker用成了 : script而已。换成类似的例子,好比你发布产品直接发布源码,然后抱怨不能跨平台, : 不是每个用户拿去都能编译过
|
f**d 发帖数: 177 | 43 PIP LD
【在 w***g 的大作中提到】 : 好好的在看电视剧,LD重新make了一个docker,然后pip还是github上软件升级了, : 全都screw up。现在没法看剧了。以后dockerfile凡是想reproduce的,一律都得 : 加上软件版本号,最好把package全都下到本地。 : 我自己也被同一个问题害过。搞一次比赛,还没完,中间tensorflow升级了, : theano升级了,scikit-image也升级了,升级跟赶投胎似的。日子没法过了。
|
c********1 发帖数: 5269 | 44 pip install MySQL_python==1.2.2
【在 i******e 的大作中提到】 : pip 能控制版本号吧。 : 容我喷一句: : 这就是为啥软件工程得控制复杂度,连wdong 这样的大牛也不愿意仔细看文档。
|
d*******r 发帖数: 3299 | 45 下午看wdong这帖子上十大了,mitbbs小编很潮啊,还知道docker... |
d*******r 发帖数: 3299 | 46 我从来没玩过这个NixOS, 是你们PL大牛圈子设计的么?
nixos.org 登上去看, 好像以前的haskell网站
【在 a*****e 的大作中提到】 : 重要的事情说三遍: : Deterministic software configuration is a solved problem. : Reproducible Linux environment is a solved problem. : System upgrade with rollbacks is a solved problem. : 答案就是 Nix 或者 NixOS.
|
a*****e 发帖数: 1700 | 47 Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输
入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。
Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但
Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每
个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系
统的软件包管理的主要区别是:
1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲
突。
2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
的配置或者任何依赖的软件有所变化,那么就会产生一个新的完全独立的安装包。
3. 用户直接指定使用环境需要什么软件,Nix 保证所需软件都安装好,而且把 PATH
和相关的配置都设好。用户可以在不同环境下随意切换,且不会互相影响。这点对开发
非常方便,比如我需要把软件在不同版本的 Python 下做测试,只需要一个命令就可以
进入 sub-shell,目录都不用换。
这一整套的软件配置系统相当于一个用 Nix 语言写的库,保扩大部分常用和不常用的
Linux 软件的各个版本。然后 NixOS 就是以此为基础,用 Nix 语言描述 OS 和硬件配
置,就相当于一个 Linux distro,因为软件的安装结果相互不干扰,可以方便一键
rollback。再然后 NixOps 继续扩展到机器之间的配置,可以直接把集群 deploy 到
AWS 或者 Google Engine。
Nix 好用的地方就是它只是 specification,它的结果一定是 deterministic 和
reproducible,这种好处只有纯函数语言能够带来。像 Docker 这种还依赖版本号和
shell 脚本来做安装,永远也赶不上。当然 Nix 和 Docker 毕竟是两个层面的东西,
也不存在谁取代谁。我只是想说,软件硬件系统的配置方面,需要 Nix 这样的解决方
案。
对于普通 Linux 用户来说,大多数时候也不需要这么严格,其它系统用着就是个习惯
和偏好。普通用户就算是用 Nix 也主要是用它现成的包管理,一键安装什么的,命令
行敲敲好,也不会涉及深层次的东西。
而对于有这方面刚需的用户,还是要学习如何用 Nix 写自己的配置,如何把它提供的
软件配置库以更灵活的方式定制自己的环境或者系统。这当中的好处,谁用谁知道。我
用 Linux 做主力有 20 年了,从 Slackware 3.0 一路走过来的,用了 Nix 之后是无
法回去用其它的了。
【在 d*******r 的大作中提到】 : 我从来没玩过这个NixOS, 是你们PL大牛圈子设计的么? : nixos.org 登上去看, 好像以前的haskell网站
|
w***g 发帖数: 5958 | 48 这么好的帖子别跟在这里埋没了.
【在 a*****e 的大作中提到】 : Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输 : 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。 : Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但 : Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每 : 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系 : 统的软件包管理的主要区别是: : 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲 : 突。 : 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所 : 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
|
N*****m 发帖数: 42603 | 49 不是一个范畴。卫东这个application-level的packaging。
【在 a*****e 的大作中提到】 : 重要的事情说三遍: : Deterministic software configuration is a solved problem. : Reproducible Linux environment is a solved problem. : System upgrade with rollbacks is a solved problem. : 答案就是 Nix 或者 NixOS.
|
e*******o 发帖数: 4654 | 50 试了一下,确实不错。至少在软件包管理比Ubuntu自带的领先一代。
【在 a*****e 的大作中提到】 : Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输 : 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。 : Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但 : Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每 : 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系 : 统的软件包管理的主要区别是: : 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲 : 突。 : 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所 : 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
|
|
|
d*******r 发帖数: 3299 | 51 很有启发,长知识了,回头试试.帖子存了.
【在 a*****e 的大作中提到】 : Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输 : 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。 : Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但 : Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每 : 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系 : 统的软件包管理的主要区别是: : 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲 : 突。 : 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所 : 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
|
d*******r 发帖数: 3299 | 52 """
2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所
有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
的配置或者任何依赖的软件有所变化,那么就会产生一个新的完全独立的安装包。
"""
这个看着挺靠谱的,算是binary级别的deterministic和reproducible.
Docker image那种一层层累加的方式, 也是binary级别的deterministic和
reproducible.
但是是相对比较低级, 是没有和依赖的code/libs/cfg的语义结合, 是瞎的.
Nix这个是有语义的, 而且粒度划分看着更精细. 回头有时间玩玩试试.
【在 a*****e 的大作中提到】 : Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输 : 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。 : Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但 : Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每 : 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系 : 统的软件包管理的主要区别是: : 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲 : 突。 : 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所 : 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
|
n******7 发帖数: 12463 | 53 各个distro都可以用上?非常不错啊
【在 a*****e 的大作中提到】 : Nix 是一个纯函数语言,用来定制软件或者系统配置。因为无副作用,能够保证只要输 : 入(也就是依赖关系)不变,那么输出(可以理解为软件或者系统的安装)也不变。 : Nix 同时也是一套基于 Linux 的软件包管理系统,类似 npm, apt 之类的意思。但 : Nix 可以装到任何 Linux (还包括 Mac)系统上,甚至无需 root 权限。它管理的每 : 个软件包其实就是用 Nix 语言写好的表达式,然后提供命令行用于安装。它和其它系 : 统的软件包管理的主要区别是: : 1. Nix 将每个软件安装到自己的独立目录,任何软件都可以多版本可以共存,没有冲 : 突。 : 2. 软件包的具体版本号其实是个 hash,是根据其源代码的 hash,编译的配置,和所 : 有依赖关系的 hash 算出来的。所以就算是同一个软件,比如 Python 3.6.1,如果它
|