【问题标题】:conda environment from windows to linux从windows到linux的conda环境
【发布时间】:2018-08-06 13:21:54
【问题描述】:

我在 windows 上使用 pycharm 开发了一个项目,我想部署在 ubuntu 服务器上。

我正在尝试使用以下命令创建requirements.txt

conda list -e > requirements.txt
conda list > requirements.txt

根据选项,requirements.txt 看起来像以下任何一种:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
@EXPLICIT
https://repo.anaconda.com/pkgs/main/win-64/blas-1.0-mkl.tar.bz2
https://repo.anaconda.com/pkgs/main/win-64/ca-certificates-2018.03.07-0.tar.bz2
https://repo.anaconda.com/pkgs/main/win-64/icc_rt-2017.0.4-h97af966_0.tar.bz2
https://repo.anaconda.com/pkgs/main/win-64/intel-openmp-2018.0.3-0.tar.bz2

或者这个

# packages in environment at C:\ProgramData\Anaconda2\envs\myenvs:
#
# Name                    Version                   Build  Channel
anyjson                   0.3.3            py36h1110a06_1  
arrow                     0.12.1                   py36_1  
asn1crypto                0.24.0                   py36_0  
babel                     2.6.0                    py36_0

或者这个

name: myenv
channels:
  - defaults
dependencies:
  - anyjson=0.3.3=py36h1110a06_1
  - arrow=0.12.1=py36_1
  - asn1crypto=0.24.0=py36_0
  - babel=2.6.0=py36_0
  - blas=1.0=mkl

无论我如何尝试这样做,我都会在 ubuntu 机器上遇到错误,在某些情况下,因为该软件包适用于 Windows:(/win-64/)

https://repo.anaconda.com/pkgs/main/win-64/ca-certificates-2018.03.07-0.tar.bz2 

我已经阅读了很多文档,但我似乎无法得到我想要的东西。 Conda (Python) Virtual Environment is not Portable from Windows to Linux

有什么解决办法吗?

【问题讨论】:

  • 它可以使用conda env export 输出并删除仅适用于win-64 的包。有些可能需要用 linux 等效替换。我认为在 WSL 下安装 conda 可以解决你的一些问题:这样做你可以在 windows 下直接使用 linux-64 包进行开发。请注意,我还不能完全测试这个配置。
  • 也许:如果您不需要固定所有依赖版本,pipreqs 或类似工具可能只导出通常更平台不变的顶级依赖项,并且将请求特定于平台的依赖项一经请求。但是这有很多失败的机会,因为有些包没有直接在源代码中使用,必须手动安装。

标签: python ubuntu conda


【解决方案1】:

默认情况下,conda 将使用构建导出您的环境,但构建可以是特定于平台的。

对我有用的解决方案是使用--no-build 标志:

$ conda env export --no-build > environment.yml

希望这会有所帮助。

【讨论】:

  • 不幸的是,这不起作用......仍然留下了一些特定于 Windows 的软件包。
  • 我正在尝试做同样的事情并遇到同样的问题 - 得到了十几个特定于 Windows 的包..
  • 我试图弄清楚为什么这对我有用,以及为什么这不是export 的默认行为。我的意思是,谁想要导出一个默认情况下与开发它的机器紧密耦合的环境?
【解决方案2】:

我正在处理同样的问题,我在 Anaconda 文档中找到了这个:

Conda 在安装时不检查架构或依赖项 一个规范文件。为确保软件包正常工作,请确保 该文件是从工作环境中创建的,并在 相同的架构、操作系统和平台,例如 linux-64 或 osx-64

Managing enviroments

【讨论】:

  • AKA - conda 在这方面基本上一文不值。
【解决方案3】:

另类

作为替代方案,您只导出您添加的依赖项,而不是使用 conda env export --from-history 导出的任何传递依赖项,这会导致类似

name: email_scraper
channels:
  - https://conda.anaconda.org/conda-forge/
  - defaults
dependencies:
  - python=3.9
  - img2pdf
  - python-dotenv
  - google-cloud-storage
  - psycopg2
  - pypdf2
  - pytest
  - google-cloud-logging

虽然这会丢失版本,但您可能需要通过交叉引用其他 environmnet.yaml 文件手动添加它们(繁琐)。

与平台相关的问题经常发生在底层传递依赖项中。您基本上是在 env 的特异性和可转移性之间进行权衡。默认的export 是在单个操作系统平台上运行的高度特定的环境。后者更通用,但在不同的操作系统上内部可能会有所不同。

如果您在 2022 年来到这里,您可能想看看 Poetry 作为包管理器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多