我正在使用一些新的库,恐怕我的脚本将来可能由于意外的软件包更新而显示一些麻烦。因此,我想创建一个新环境,但是我不想手动安装所有基本软件包,例如numpy,pandas等。因此,使用conda创建一个新环境是有意义的,它是我的基本环境的精确副本。还是会造成某种冲突?
答案 0 :(得分:0)
使用conda进行复制是可行的,但如果仅使用virtualenv,则应手动构建requirements.txt,创建一个新的虚拟环境,将其激活,然后仅使用pip install -r requirements.txt
。注意关键字manually
。
例如,如果您需要requests
,numpy
和熊猫,那么您的requirements.txt
将如下所示:
requests==2.20.0
numpy==1.15.2
pandas==0.23.4
在这种情况下,您实际上可以排除numpy,但是在使用时仍会保留它,如果删除了熊猫,您仍然需要它。我通过安装新软件包来构建它,然后使用pip Frozen查找我刚刚安装的模块,并将其放入当前版本的requirements.txt中。当然,如果我达到了与他人共享的状态,我将==
替换为>=
,大多数时候就足够了,如果发生冲突,您需要检查哪些冲突的库要求,并在可能的情况下进行调整,例如您根据需要输入了最新的numpy版本,但是较旧的库特别需要x.y.z版本,并且您的库也适合该版本(理想情况)。
无论如何,这是保存虚拟环境所需的资源,这对您分发项目也有帮助,因为任何人都可以将此文件与您的源一起放入新文件夹并创建自己的环境而无需任何麻烦。
现在,这就是为什么您应该手动构建它的原因:
$ pip freeze
certifi==2018.10.15
chardet==3.0.4
idna==2.7
numpy==1.15.2
pandas==0.23.4
python-dateutil==2.7.3
pytz==2018.5
requests==2.20.0
six==1.11.0
urllib3==1.24
virtualenv==16.0.0
six
? pytz
? 什么?其他库也使用它们,但是除非查找它,否则我们什至不知道它们的用途,并且不应将它们列为项目依赖项,如果它们依赖它们,则会安装它们
这样,您可以确保仅在非常罕见的情况下不会有太多问题,在这种情况下,您使用的一个库需要另一个库的新版本,而另一个库则需要较旧的版本版本冲突的库,在这种情况下会造成很大的混乱,但通常不会发生。