如何获得pip安装的python包的egg或wheel文件?

时间:2017-10-10 11:26:28

标签: python pip pyspark python-wheel

我在Spark执行器上有类似的导入错误,如此处所述,仅使用psycopg2:ImportError: No module named numpy on spark workers

Here它说"虽然pandas太复杂而无法作为* .py文件分发,但您可以为它及其依赖项创建一个egg并将其发送给执行者"。

所以问题是"如何从包及其依赖项创建egg文件?"或轮子,以防鸡蛋遗留下来。在pip有没有这个命令?

2 个答案:

答案 0 :(得分:2)

你想制造一个轮子。它们比鸡蛋更新,更强大,并且受到Python 2/3的支持。

对于像numpy这样受欢迎的东西,你不需要自己打扰制作轮子。他们将轮子包装在他们的发行版中,所以你可以下载它。许多python库都有一个轮子作为其分发的一部分。见这里:https://pypi.python.org/pypi/numpy

如果您有点好奇,请参阅此处如何制作一般:https://pip.pypa.io/en/stable/reference/pip_wheel/

或者,您可以在目标工作者上安装numpy。

修改

在您发表评论之后,我认为提及pipdeptree实用程序是恰当的。如果您需要手动查看pip依赖项是什么,此实用程序将为您列出它们。这是一个例子:

$ pipdeptree
3to2==1.1.1
anaconda-navigator==1.2.1
ansible==2.2.1.0
  - jinja2 [required: <2.9, installed: 2.8]
    - MarkupSafe [required: Any, installed: 0.23]
  - paramiko [required: Any, installed: 2.1.1]
    - cryptography [required: >=1.1, installed: 1.4]
      - cffi [required: >=1.4.1, installed: 1.6.0]
        - pycparser [required: Any, installed: 2.14]
      - enum34 [required: Any, installed: 1.1.6]
      - idna [required: >=2.0, installed: 2.1]
      - ipaddress [required: Any, installed: 1.0.16]
      - pyasn1 [required: >=0.1.8, installed: 0.1.9]
      - setuptools [required: >=11.3, installed: 23.0.0]
      - six [required: >=1.4.1, installed: 1.10.0]
    - pyasn1 [required: >=0.1.7, installed: 0.1.9]
  - pycrypto [required: >=2.6, installed: 2.6.1]
  - PyYAML [required: Any, installed: 3.11]
  - setuptools [required: Any, installed: 23.0.0

如果您正在使用Pyspark并需要打包您的依赖项,则pip无法自动为您执行此操作。 Pyspark有自己的依赖管理,pip一无所知。据我所知,你能做的最好的事情就是列出依赖关系,然后手工推送它们。

另外,Pyspark并不依赖于numpy或psycopg2,所以如果你所知道的pip是你的Pyspark版本,那么pip可能不会告诉你你需要它们。您已经介绍了这种依赖性,因此您负责将其交给Pyspark。

作为旁注,我们使用引导脚本来安装我们的依赖项(如numpy),然后再启动集群。它似乎运作良好。这样你就可以在脚本中列出一次你需要的库,然后就可以忘掉了它。

HTH。

答案 1 :(得分:2)

您可以使用wheel安装pip install wheel

然后使用python setup.py bdist_wheel创建.whl。您可以在python包的根目录的dist目录中找到它。如果你想要python 2和python 3的单个.whl文件,你可能还想传递--universal

More info on wheel