相关疑难解决方法(0)

我可以使用`pip`而不是`easy_install`来进行`python setup.py install`依赖解析吗?

python setup.py install将自动安装requires=[]使用中列出的包easy_install.我怎样才能使用它pip呢?

python pip easy-install

133
推荐指数
3
解决办法
8万
查看次数

如何在setup.py中引导numpy安装

我有一个C扩展项目需要numpy.理想情况下,我希望下载我的项目的人能够运行python setup.py install或使用一个电话pip.我setup.py遇到的问题是,我需要导入numpy来获取头文件的位置,但我希望numpy只是一个常规要求,install_requires以便从Python包索引中自动下载.

以下是我正在尝试做的一个示例:

from setuptools import setup, Extension
import numpy as np

ext_modules = [Extension('vme', ['vme.c'], extra_link_args=['-lvme'],
                         include_dirs=[np.get_include()])]

setup(name='vme',
      version='0.1',
      description='Module for communicating over VME with CAEN digitizers.',
      ext_modules=ext_modules,
      install_requires=['numpy','pyzmq', 'Sphinx'])
Run Code Online (Sandbox Code Playgroud)

显然,import numpy在安装之前我不能处于顶端.我已经看到一个setup_requires参数传递给setup()但是找不到任何关于它的用途的文档.

这可能吗?

python bootstrapping numpy setuptools

31
推荐指数
3
解决办法
7051
查看次数

为什么setup_requires不适合numpy?

我想创建一个setup.py文件,自动将构建时依赖项解析为numpy(用于编译扩展).我的第一个猜测是使用setup_requires和子类化命令类来导入numpy模块:

from setuptools import setup, Extension
from distutils.command.build import build as _build

class build(_build):
    def run(self):
        import numpy
        print(numpy.get_include())
        _build.run(self)

setup(
    name='test',
    version='0.0',
    description='something',
    cmdclass={'build':build},
    setup_requires=['numpy'],
)
Run Code Online (Sandbox Code Playgroud)

现在,运行python setup.py build成功编译numpy但然后失败(内部build.run):

AttributeError: 'module' object has no attribute 'get_include'
Run Code Online (Sandbox Code Playgroud)

但是,如果再次运行相同的命令,该命令现在成功(并且不需要重新编译numpy).

我已经在python {2.6,2.7,3.3}上使用和不使用virtualenv在最新版本的setuptools上进行了测试.

我已经看到使用pkg_resources.resource_filename解决方法似乎工作得很好,如果我们想要的只是include目录.编辑:只适用于python2!

但是,我现在很好奇.使用setup_requires有什么警告?可能是因为numpy无法正常工作的原因是什么?对于一些更简单的模块,它似乎没有问题.

python numpy setuptools

11
推荐指数
1
解决办法
2392
查看次数

标签 统计

python ×3

numpy ×2

setuptools ×2

bootstrapping ×1

easy-install ×1

pip ×1