代码之家  ›  专栏  ›  技术社区  ›  Light_B jezrael

复制基本环境以在Python中创建新环境

  •  0
  • Light_B jezrael  · 技术社区  · 6 年前

    我正在使用一些新的库,我担心我的脚本在将来可能会出现一些问题,包会出现意外的更新。因此,我想创建一个新的环境,但我不想手动安装所有的基本软件包,如numpy、pandas等。那么,使用conda创建一个新的环境是有意义的,它是我的基本环境的精确副本,还是会产生某种冲突?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Purple Ice    6 年前

    使用conda进行复制是可行的,但是如果您只使用virtualenv,则应该手动构建要求.txt,创建一个新的虚拟环境,激活它,然后简单地使用 pip install -r requirements.txt . 注意关键词- manually .

    例如,如果你需要 requests numpy 还有熊猫,你的 requirements.txt 看起来像这样:

    requests==2.20.0
    numpy==1.15.2
    pandas==0.23.4
    

    在这种情况下,您实际上可以排除numpy,但是您仍然在使用它时保留它,如果您删除了pandas,您仍然需要它。我通过安装一个新的包来构建它,然后使用pipfreeze找到我刚刚安装的模块并将其放入要求.txt使用当前版本。当然,如果我到了一个我要和别人分享的地方,我会把它替换掉 == 具有 >=

    不管怎么说,这就是你要保留多少虚拟环境,如果你要分发你的项目,这也很有帮助,因为任何人都可以把这个文件放到一个新的文件夹和你的源代码,并创建自己的环境没有任何麻烦。

    现在,这就是为什么您应该手动构建它:

    $ 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 ? 其他库使用它们,但我们甚至不知道它们的用途,除非我们查找它,而且它们不应该列为项目依赖项,如果它们依赖它,它们将被安装。

    这样你就可以确保不会有太多的问题,只有在 非常罕见的病例 如果您正在使用的一个库需要另一个库的新版本,而另一个库需要一个旧版本的库,而该版本存在冲突,在这种情况下,这是一个很大的混乱,但通常不会发生。