首页 > 编程问答 >离线迁移conda环境后xesmf导入出现问题

离线迁移conda环境后xesmf导入出现问题

时间:2024-07-27 12:41:50浏览次数:6  
标签:python conda offline

离线迁移conda环境(使用conda pack)后,在新平台上,导入xesmf时出错:

Traceback (most recent call last).
File "/home/xxx/miniconda3/envs/nc2p/lib/python3.11/site-packages/esmpy/interface/loadESMF.py", line 144, in
_ESMF = ct.CDLL(os.path.join(libsdir,'libesmf_fullylinked.so'),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/xxx/miniconda3/envs/nc2p/lib/python3.11/ctypes/init.py", line 376, in init
self._handle = _dlopen(self._name, mode)
^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: /home/conda/feedstock_root/build_artifacts/esmf_1677849384616/h_env_placehold_placehold_placehold_placehold_placehold_placehold placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold placeh/lib/libesmf_fullylinked.so: cannot open shared object file: No such file or directory
Traceback (most recent call last).
File "/home/xxx/miniconda3/envs/nc2p/lib/python3.11/site-packages/esmpy/interface/loadESMF.py", line 144, in
_ESMF = ct.CDLL(os.path.join(libsdir,'libesmf_fullylinked.so'),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/xxx/miniconda3/envs/nc2p/lib/python3.11/ctypes/init.py", line 376, in init
self._handle = _dlopen(self._name, mode)
^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: /home/conda/feedstock_root/build_artifacts/esmf_1677849384616/h_env_placehold_placehold_placehold_placehold_placehold_placehold placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold placeh/lib/libesmf_fullylinked.so: cannot open shared object file: No such file or directory

我知道迁移环境后操作系统路径有问题,那么如何更改LINK路径?我已经在新平台上成功部署了 ESMF。

My libesmf_fullylinked.so is in /home/xxx/miniconda3/envs/nc2p/lib/libesmf_fullylinked.so in python and /home/xxx/xx/esmf-8.6.0/lib/libO/Linux.intel.64.mpiuni.default in ESMF

你遇到的问题是 xesmf 依赖的 ESMF 库链接路径在迁移后不正确。

你可以尝试以下几种方法解决:

方法一:设置环境变量

  1. 找到 libesmf_fullylinked.so 的正确路径 : 根据你的描述,它位于 /home/xxx/miniconda3/envs/nc2p/lib/ /home/xxx/xx/esmf-8.6.0/lib/libO/Linux.intel.64.mpiuni.default
  2. 设置 LD_LIBRARY_PATH 环境变量 : 将 libesmf_fullylinked.so 所在路径添加到 LD_LIBRARY_PATH 环境变量中。 你可以在终端执行以下命令:

bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/miniconda3/envs/nc2p/lib/

或者

bash export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/xx/esmf-8.6.0/lib/libO/Linux.intel.64.mpiuni.default

注意 : 将上述命令中的路径替换为你的实际路径。 这条命令只在当前终端会话有效。 为了使更改永久生效,你需要将这条命令添加到你的 shell 配置文件(例如 ~/.bashrc ~/.zshrc )中。

  1. 重新激活conda环境 : bash conda deactivate conda activate nc2p

方法二:修改 esmpy 的配置文件

  1. 找到 esmpy 的安装路径 : 你可以使用以下命令找到它:

    python import esmpy print(esmpy.__path__)

    这将会打印出类似 /home/xxx/miniconda3/envs/nc2p/lib/python3.11/site-packages/esmpy 的路径。

  2. 修改配置文件 : 在 esmpy 的安装路径下找到 interface 文件夹, 然后打开 loadESMF.py 文件。 找到以下代码行:

    python _ESMF = ct.CDLL(os.path.join(libsdir,'libesmf_fullylinked.so'),

    将它修改为:

    python _ESMF = ct.CDLL('/home/xxx/miniconda3/envs/nc2p/lib/libesmf_fullylinked.so')

注意 : 将上述代码中的路径替换为你的 libesmf_fullylinked.so 的实际路径。

  1. 保存文件并重新启动 Python : 保存对 loadESMF.py 文件的修改,然后重新启动你的 Python 解释器或 IDE。

方法三:使用 patchelf 修改链接路径

patchelf 可以直接修改可执行文件或库文件的依赖库路径。

  1. 安装 patchelf :

    bash sudo apt install patchelf # Ubuntu/Debian sudo yum install patchelf # CentOS/RHEL

  2. 修改 esmpy 依赖库路径 :

    bash patchelf --set-rpath '$LD_LIBRARY_PATH:/home/xxx/miniconda3/envs/nc2p/lib/' /path/to/esmpy/module.so

    /path/to/esmpy/module.so 替换为实际的 esmpy 模块路径。

注意 : 使用 patchelf 需要谨慎,因为错误的操作可能会损坏你的文件。 建议在操作前备份你的文件。

请选择其中一种方法尝试解决问题。 如果问题仍然存在,请提供更多信息,例如你的操作系统版本,ESMF 版本,以及完整的错误信息。

标签:python,conda,offline
From: 78792556

相关文章

  • jupyter notebook使用conda虚拟环境
     1、在开始菜单打开anacondaPrompt输入:condaenvlist 查看虚拟环境 2、创建虚拟环境名称创建虚拟环境:condacreate-n虚拟环境名字python=python版本号输入:condacreate-npy38_env01python=3.8 3、激活虚拟环境condaactivatepy38_env01 4、安装nb_conda......
  • crontab 运行 .sh 文件调用 python 脚本
    我有一个pythonselenium脚本,可以打开chrome并为我运行一些自动化任务。在crontab中直接调用python可以使用下面的行。:10.0是我运行echo$DISPLAY时得到的值。我使用的是Ubuntu22.04.4LTS5823**2DISPLAY=:10.0/usr/bin/python3/home/user/Script......
  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......
  • python+flask计算机毕业设计外卖食品安全监管微信小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,外卖行业作为“互联网+餐饮”的典范,近年来呈现出井喷式增长态势,极大地便利了人们的日常生活。然而,外卖食品......
  • python+flask计算机毕业设计楼盘销售系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着房地产市场的蓬勃发展,楼盘销售作为房地产行业的重要环节,其管理效率与服务质量直接影响到企业的市场竞争力和客户满意度。传统的楼盘销......
  • python+flask计算机毕业设计基于web的小区疫情防控信息管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,特别是新冠疫情的持续影响,小区作为城市管理的基础单元,其疫情防控工作显得尤为重要。传统的小区管理方式在面对......
  • Python 3 使用 super() 函数时出现“类型错误:__init__() 获得多个参数值”
    我正在使用继承的Python3编写一个OOP程序,当我尝试像这样初始化子类时遇到标题错误:classParent:def__init__(self,var1,var2):self.var1=var1self.var2=var2#moremethodsthattosomestuffclassChild(Parent):a=1#aan......