如何从 .egg 文件夹离线安装新版本的 python 包?

How to install offline a new version of python package from a .egg folder?

我正在尝试在没有互联网连接的机器上安装 statsmodels 的开发版本。我已经在我自己的机器上下载并安装了这个包(经过测试并且工作正常)并且我已经将生成的文件夹复制到离线机器上的 Anaconda\Lib\site-packages 下。

我还保留了现有的 statsmodels 文件夹(因为这是我机器上发生的情况),因此两台机器中的结构看起来像

site-packages\
    statsmodels
    statsmodels-0.6.1-py2.7.egg-info
    statsmodels-0.8.0-py3.5-win-amd64.egg\
        EGG-INFO
        statsmodels

内部 statsmodels 文件夹(低于 0.8.0 的文件夹)包含我要导入的最新版本。为了让进口商选择正确的版本,我复制了一个出现在我的机器上的名为 easy-install.pth 的文件,其内容如下

import sys; sys.__plen = len(sys.path)
./statsmodels-0.8.0-py3.5-win-amd64.egg
import sys; new = sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p = getattr(sys, '__egginsert', 0); sys.path[p:p] = new; sys.__egginsert = p + len(new)

现在导入器选择了正确的版本 (0.8.0),但它无法导入 DLL,出现以下错误

    C:\Anaconda2\lib\site-packages\statsmodels-0.8.0-py3.5-win-amd64.egg\statsmodels\tsa\statespace\tools.py in set_mode(compatibility)
     59     if not compatibility:
     60         from scipy.linalg import cython_blas
---> 61         from . import (_representation, _kalman_filter, _kalman_smoother,
     62                        _simulation_smoother, _tools)
     63         compatibility_mode = False

C:\Anaconda2\lib\site-packages\statsmodels-0.8.0-py3.5-win-amd64.egg\statsmodels\tsa\statespace\_representation.py in <module>()
      6     print(__name__,__file__)
      7     imp.load_dynamic(__name__,__file__)
----> 8 __bootstrap__()

C:\Anaconda2\lib\site-packages\statsmodels-0.8.0-py3.5-win-amd64.egg\statsmodels\tsa\statespace\_representation.py in __bootstrap__()
      5     __loader__ = None; del __bootstrap__, __loader__
      6     print(__name__,__file__)
----> 7     imp.load_dynamic(__name__,__file__)
      8 __bootstrap__()

ImportError: DLL load failed: The specified module could not be found.

我检查了最后一个函数调用中的变量 __file__,它指向状态空间文件夹下存在的 DLL _representation.cp35-win_amd64.pyd

有谁知道这个问题的解决方法,或者我如何告诉进口商找到丢失的模块?

我建议你使用 pip 列出所有需要的库并下载它们,然后分发下载的库并安装。

列出所有需要的库

来自与目标服务器具有相同配置的 server/workstation(相同 OS,相同的系统范围 Python)。

创建一个新的空 virtualenv 并像往常一样安装 statsmodels:

virtualenv venv
source venv/bin/activate
pip install statsmodels 

然后列出所有需要的包 pip freeze:

pip freeze > requirements.txt

下载所有需要的库

创建目录存放所有eggs/wheels,并使用pip download下载库:

mkdir libs
cd libs/
pip download --no-deps -r requirements.txt

分发到您的目标服务器

libs 目录复制到您的目标服务器。

创建一个 virtualenv 并从您的 libs 目录安装:

virtualenv venv
source venv/bin/activate
pip install --find-links libs/ statsmodels

应该可以。