0

我希望我的问题很清楚,如果没有,请告诉我。

我将OpenImageIO的 python 绑定 (pybind11) 用于将在数百台计算机上运行的一些脚本。不幸的是,我花了很多时间来安装 OpenImageIO 并让它与我的 Python2 安装一起工作。我想知道是否有一种方法可以创建可以发送到其他计算机的文件/文件夹,以便他们可以简单地使用“pip install file/folder”安装 Python 模块。

谢谢你的帮助

4

1 回答 1

1

您是否在具有共享文件系统的计算集群上运行脚本? 如果是这样,则无需为每台机器创建单独的 python 安装。最简单的解决方案是在所有机器都可以访问的位置创建一个 python 环境。在非系统位置创建 Python 环境的一种简单方法是使用Miniconda。将其安装到共享(网络)位置,并为您的所有机器创建一个使用环境。

如果您的机器没有共享文件系统,那么您需要以某种方式独立地在所有机器上重现环境。在这种情况下,没有简单的方法可以使用pip.**

但是,如果您可以conda改用,那么有一个非常简单的解决方案。首先,将所需的一切安装到单个 conda 环境中。然后你有一个选择:你可以导出 conda 包列表,或者简单地将整个 conda 环境目录复制到其他机器上。

OpenImageIO 可从conda-forge频道获得,这是一个社区开发的 conda 包存储库。包的名称是py-openimageio。他们已经停止更新 python-2.7 版本,但旧版本仍然可用。

这是如何做到的。

  1. 安装Miniconda-2.7
  1. 使用 python 2.7、OpenImageIO 和您需要的任何其他包创建一个新环境:
conda create -n jao-stuff -c conda-forge py-openimageio python=2.7
conda activate jao-stuff
python -c "import OpenImageIO; print('It works!')"
  1. 执行以下操作之一:

    一个。导出环境中的包列表:

    conda env export -n jao-stuff -f jao-stuff-packages.yaml
    

    然后,在其他机器上安装 Miniconda,然后使用上一步中的包列表创建环境:

    conda create -n jao-stuff --file jao-stuff-packages.yaml
    

    或者

    湾。只需将环境中的所有文件复制到其他机器上,然后直接运行即可。Conda 环境是自包含的(除了一些低级系统库),因此您通常可以将整个内容复制到另一台机器并运行它,而无需任何进一步的安装步骤。

    tar czf jao-stuff.tar.gz $(conda info --prefix)/envs/jao-stuff
    

    在另一台机器上,在任何地方解压 tarball,然后运行python它包含的可执行文件:

    tar xzf jao-stuff.tar.gz
    jao-stuff/bin/python -c "import OpenImageIO; print('It works!')"
    

**那是因为 OpenImageIO 是一个 C++ 项目,具有多个 C++ 依赖项,并且它们不提供该wheel格式的二进制文件。我不怪他们——即使有轮子,pip 也不太适合这个用例。另一方面,Conda 正是为这个用例而设计的,并且非常适合它。

于 2020-07-28T14:10:07.330 回答