如何获得在Pivotal Cloud Foundry上运行的python xmlsec库

时间:2018-09-04 15:21:08

标签: python linux python-3.x pivotal-cloud-foundry

我正在尝试使python模块python3-saml在使用标准python buildpack和cflinuxfs2堆栈的cloud Foundry应用程序上工作。该模块依赖于python xmlsec模块作为依赖项,但不幸的是,我在使其正常工作时遇到了问题。

我整理了一个需求文件,并提供了所有的python依赖项,但是当我运行“ cf push”命令时,仍然出现以下错误。

            Running setup.py install for xmlsec: started
              Running setup.py install for xmlsec: finished with status 'error'
              Complete output from command /tmp/contents998689849/deps/0/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-lwwtrplp/xmlsec/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-qwoda574-record/install-record.txt --single-version-externally-managed --compile:
              running install
              running build
              running build_ext
              *********************************************************************************
              Could not find xmlsec1 config. Are libxmlsec1-dev and pkg-config installed?
              *********************************************************************************

              ----------------------------------------
          Command "/tmp/contents998689849/deps/0/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-lwwtrplp/xmlsec/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-qwoda574-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-lwwtrplp/xmlsec/
          pip install has failed. You have a vendor directory, it must contain all of your dependencies.
          **ERROR** Could not install pip packages: Couldn't run pip: exit status 1
   Failed to compile droplet: Failed to run all supply scripts: exit status 14
   Exit status 223

我尝试手动上传适当的libxmlsec1-dev和libxmlsec1并设置一个环境变量以引用它们,但是在安装程序包时,暂存过程似乎只是忽略了它们。

是否有什么我可以做的才能使此过程正常进行?我以为那里有个自定义的buildpack可以解决这个问题,但是我不确定是否有办法使用标准的python buildpack来完成。

1 个答案:

答案 0 :(得分:1)

主要选择是出售您的依赖项。使用此选项,您可以在本地构建,然后再推送所有已编译的位。诀窍是您必须在兼容的系统上构建,因此需要一个Ubuntu Trusty PC / VM / Docker容器。

按照以下说明操作,然后运行cf push并确保您没有忽略vendor目录(如果存在,请从.cfignore删除)。

https://docs.cloudfoundry.org/buildpacks/python/index.html#vendoring

另一个可行的选择是使用多构建包支持。这样,您可以使用两个buildpack进行推送。第一个是Apt buildpack,第二个是python buildpack。 Apt buildpack允许您安装所需的软件包,看起来像libxmlsec1-dev。第二个只是标准的Python buildpack,但它可以访问通过Apt buildpack安装的内容。

您可以在此处查看说明:https://docs.cloudfoundry.org/buildpacks/use-multiple-buildpacks.html