1

我正在从事的项目使用结构进行许多构建步骤,并且需要离线构建作为后备。

我目前一直在安装 tarball 中提供的 python 包。

问题是我无法进入新提取的目录并setup.py install在其中运行。

@task
def deploy_artifacts():
    """Installs dependencies from local path, useful for offline builds"""
    #TODO: Handle downloading files and do something like this bellow
    tmpdir = tempfile.mkdtemp()
    artifacts_path = ''
    if not 'http' in env.artifacts_path:
        artifacts_path = env.artifacts_path

    with lcd(artifacts_path):

        for f in os.listdir(artifacts_path):
            if 'gz' in f:
                put(f, tmpdir)
                tar = os.path.join(tmpdir, f)
                target_dir = os.path.join(tempfile.gettempdir(), normalize(f))
                if not files.exists(target_dir):
                    run('mkdir %s' % target_dir)
                else: 
                    run('rm -rf %s' %target_dir)
                    run('mkdir %s' % target_dir)
                run('tar xf %s -C %s' % (tar, target_dir))
                run('rm %s' % tar)
                with cd(target_dir):
                    sudo('python setup.py install')

我已经阅读了tar无数次的手册页,但我离得到我想要的东西还差得很远。

你们中的一些人是否遇到过这样的情况?对于这种情况,还有其他(阅读:更好的)方法吗?

4

1 回答 1

1

您正在尝试做的事情(原则上)没有任何问题。也许只是采取更小的步骤到达那里。与其使用临时目录,不如将所有内容都放在一个系统位置,该位置具有已知的权限,而按照惯例没有其他任何东西可以写入,它可能会使调试更容易。至少这可以让您使用结构和手动干预的某种组合来检查出了什么问题。

从长远来看,我看到了一些替代方案。为简单起见,您希望在线和离线版本以相同的方式工作,这意味着在两种情况下都使用 easy_install / pip获取包。

一种方法是构建PyPi的镜像。如果您有足够的存储空间(30Gb),正确的方法是使用实​​现 PEP381(PyPI 的镜像基础设施)的软件,已经有一个客户端可以执行此操作(pep381client)。有许多其他项目可以做类似的事情(basketweaverdjangopypi2chishop)。

另一种选择是考虑更轻量级的代理方案。我一直在寻找pip2pipipli。我不确定他们是否会直接使用 easy_install,但值得一试。

还值得注意的是,如果您使用 pip,您可以直接从 tarball 安装。

于 2012-10-13T13:17:55.723 回答