裤子包括OS X特定的Python轮子
TLDR:Pants提取OS X特定的轮子bc我正在Mac上开发.我该如何避免这种情况,或者指定我将部署到Ubuntu?
全文: 尝试使用Pants打包Python应用程序.到目前为止一直很好,但遇到了一个问题,我已经坚持了一段时间.我正在开发一个macbook,但部署到EC2 Ubuntu. 这是我到目前为止所做的: >创造了virtualenv. 但是,当我在那里运行应用程序时,我得到: Failed to execute PEX file,missing compatible dependencies for: mysql-python pycrypto 问题似乎是裤子为这些2采用OS X特定的轮子: pex: – MySQL_python-1.2.5-cp27-none-macosx_10_11_intel.whl 我该如何避免这种情况,或者指定它们应该运行哪个操作系统? 这是完整的输出: ubuntu@ip-***:~$export PEX_VERBOSE=1 ubuntu@ip-***:~$python admin_server.pex pex: Found site-library: /usr/local/lib/python2.7/dist-packages pex: Found site-library: /usr/lib/python2.7/dist-packages pex: Tainted path element: /usr/local/lib/python2.7/dist-packages pex: Tainted path element: /usr/lib/python2.7/dist-packages pex: Scrubbing from site-packages: /usr/local/lib/python2.7/dist-packages pex: Scrubbing from site-packages: /usr/lib/python2.7/dist-packages pex: Scrubbing from user site: /home/ubuntu/.local/lib/python2.7/site-packages pex: Failed to resolve a requirement: MySQL-python==1.2.5 pex: Failed to resolve a requirement: pycrypto==2.6.1 pex: Unresolved requirements: pex: - mysql-python pex: - pycrypto pex: Distributions contained within this pex: pex: - six-1.10.0-py2.py3-none-any.whl pex: - protobuf-2.6.1-py2.7.egg pex: - setuptools-19.5-py2.py3-none-any.whl pex: - MySQL_python-1.2.5-cp27-none-macosx_10_11_intel.whl pex: - pycrypto-2.6.1-cp27-none-macosx_10_11_intel.whl pex: - futures-3.0.4-py2-none-any.whl pex: - webapp2-2.5.2-py2-none-any.whl pex: - requests-2.9.0-py2.py3-none-any.whl pex: - jmespath-0.9.0-py2.py3-none-any.whl pex: - beautifulsoup4-4.4.1-py2-none-any.whl pex: - python_dateutil-2.4.2-py2.py3-none-any.whl pex: - boto3-1.2.3-py2.py3-none-any.whl pex: - WebOb-1.5.1-py2.py3-none-any.whl pex: - cssutils-1.0.1-py2-none-any.whl pex: - webapp2_static-0.1-py2-none-any.whl pex: - Paste-2.0.2-py2-none-any.whl pex: - docutils-0.12-py2-none-any.whl pex: - botocore-1.3.22-py2.py3-none-any.whl pex: - protobuf_to_dict-0.1.0-py2-none-any.whl Failed to execute PEX file,missing compatible dependencies for: mysql-python pycrypto PS:为了确保我没有包含我的python库版本,我pip卸载了PyCrypto和MySQL-Python. 解决方法
将项目作为PEX文件分发的一个好处是,您可以准备它在多个平台上运行.例如,一个PEX可以在Linux和Mac平台上运行.对于许多项目,除了构建PEX之外没有什么特别的事情可做.但是当您的项目依赖于特定于平台的二进制代码时,您将需要执行一些额外的步骤.
包含平台特定代码的库的一个示例是psutil库.它包含在安装模块时编译为共享库的C代码.要创建包含此类依赖项的PEX文件,必须首先为除运行裤子之外的所有平台提供该库的预构建版本. 预构建库的最简单方法是使用pip工具构建轮子. 此配方假设如下: >您希望构建一个可在Linux和Mac上运行的多平台pex 让我们来一个简单的程序,引用一个库并从中创建一个pex. # src/python/ps_example/main.py import psutil for proc in psutil.process_iter(): try: pinfo = proc.as_dict(attrs=['pid','name']) except psutil.NoSuchProcess: pass else: print(pinfo) 使用Pants,您可以通过在BUILD文件中定义python_binary目标来定义可执行文件: # src/python/ps_example/BUILD python_binary(name='ps_example',source = 'main.py',dependencies = [ ':psutil',# defined in requirements.txt ],) # Defines targets from specifications in requirements.txt python_requirements() 在同一目录中,列出requirements.txt文件中的python库: # src/python/ps_example/requirements.txt psutil==3.1.1 现在,为了制作多平台pex,你需要访问一个Linux盒来创建psutil wheel的linux版本.将requirements.txt文件复制到linux机器,然后执行pip工具: linux $mkdir ~/src/cookbook/wheelhouse linux $pip wheel -r src/python/multi-platform/requirements.txt --wheel-dir=~/src/cookbook/wheelhouse 这将创建一个特定于平台的轮文件. linux $ls ~/src/cookbook/wheelhouse/ psutil-3.1.1-cp27-none-linux_x86_64.whl 现在,您需要将特定于平台的车轮复制到要构建多平台pex的机器(在本例中为您的Mac笔记本电脑).如果您经常使用此配方,您可能需要配置Python Respository来存储预先构建的库. 我们将使用与上面相同的BUILD文件设置,但修改python_binary以指定platforms =参数. # src/python/ps_example/BUILD python_binary(name='ps_example',platforms=[ 'linux-x86_64','macosx-10.7-x86_64',],) # Defines targets from specifications in requirements.txt python_requirements() 您还需要告诉裤子在哪里可以找到预先构建的python包.编辑pants.ini并添加: [python-repos] repos: [ "%(buildroot)s/wheelhouse/" ] 现在,将文件psutil-3.1.1-cp27-none-linux_x86_64.whl复制到mac工作站,并将其放在repo根目录下名为wheelhouse /的目录中. 完成后,您现在可以构建多平台pex mac $./pants binary src/python/py_example 您可以通过解压缩验证pex中包含mac和Linux的库: mac $unzip -l dist/ps_example.pex | grep psutil 17290 12-21-15 22:09 .deps/psutil-3.1.1-cp27-none-linux_x86_64.whl/psutil-3.1.1.dist-info/DESCRIPTION.rst 19671 12-21-15 22:09 .deps/psutil-3.1.1-cp27-none-linux_x86_64.whl/psutil-3.1.1.dist-info/METADATA 1340 12-21-15 22:09 .deps/psutil-3.1.1-cp27-none-linux_x86_64.whl/psutil-3.1.1.dist-info/RECORD 103 12-21-15 22:09 ... .deps/psutil-3.1.1-cp27-none-macosx_10_11_intel.whl/psutil-3.1.1.dist-info/DESCRIPTION.rst 19671 12-21-15 22:09 .deps/psutil-3.1.1-cp27-none-macosx_10_11_intel.whl/psutil-3.1.1.dist-info/METADATA 1338 12-21-15 22:09 .deps/psutil-3.1.1-cp27-none-macosx_10_11_intel.whl/psutil-3.1.1.dist-info/RECORD 109 12-21-15 22:09 ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |