Python 的 'setup.py install' 的步骤 'build_py' 中的神秘错误

Cryptic error in step 'build_py' of Python's 'setup.py install'

在尝试安装我的 python 项目 adla 时,我收到了一个我无法理解的错误:

(devel)> $ cd $PROJECT_DIR
(devel)> $ pip3 -v install .
Processing [PROJECT_DIR]
  Running setup.py [...] egg_info for package from file://[PROJECT_DIR]
    Running command python setup.py egg_info
    running egg_info
    creating pip-egg-info/adla.egg-info
    writing requirements to pip-egg-info/adla.egg-info/requires.txt
    writing dependency_links to pip-egg-info/adla.egg-info/dependency_links.txt
    writing entry points to pip-egg-info/adla.egg-info/entry_points.txt
    writing pip-egg-info/adla.egg-info/PKG-INFO
    writing top-level names to pip-egg-info/adla.egg-info/top_level.txt
    writing manifest file 'pip-egg-info/adla.egg-info/SOURCES.txt'
    warning: manifest_maker: standard file '-c' not found

    reading manifest file 'pip-egg-info/adla.egg-info/SOURCES.txt'
    reading manifest template 'MANIFEST.in'
    writing manifest file 'pip-egg-info/adla.egg-info/SOURCES.txt'
  Source in [...] has version 0.8.4, which satisfies requirement adla==0.8.4 from file://[PROJECT_DIR]
Requirement already satisfied [...]
Could not parse version from link: file://[PROJECT_DIR]
Installing collected packages: adla
  Running setup.py install for adla
    Running command [...]/Environments/devel/bin/python3.5 -c [...]
    running install
    running build
    running build_py
    error: [Errno 2] No such file or directory: 'build/lib.macosx-10.11-x86_64-3.5/None'
    UPDATING build/lib.macosx-10.11-x86_64-3.5/None
    Complete output from command [...]Environments/devel/bin/python3.5 -c "import setuptools, tokenize;__file__='/var/folders/t2/kg3yygn93nd2s175mkdcx0sc0000gn/T/pip-cbqf77qe-build/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/t2/kg3yygn93nd2s175mkdcx0sc0000gn/T/pip-rtbxcavl-record/install-record.txt --single-version-externally-managed --compile --install-headers [...]/Environments/devel/bin/../include/site/python3.5/adla:
    running install
    running build
    running build_py
    error: [Errno 2] No such file or directory: 'build/lib.macosx-10.11-x86_64-3.5/None'
    UPDATING build/lib.macosx-10.11-x86_64-3.5/None
    ----------------------------------------
[...]
(devel)> $

无论我使用的是什么机器,都会出现错误(在 OS X 10.11、Ubuntu Server 14.04 和虚拟机 运行ning Ubuntu 上试过电脑版 14.04)。我还尝试重新安装 Python 3.5、pipsetuptools,但无济于事。如您所见,我在 virtualenv 中使用 Python 3.5,其中 pip (7.1.2)setuptools (18.4).

该项目使用 versioneer 进行版本控制,并在扩展 adla.ml.dtw 中包含一个 numpy 通用 ufunc,它在发布 $ python3 setup.py build_ext.

时构建良好

我的 setup.py 文件如下所示

...
build_requires = []
try:
    import numpy
except ImportError:
    build_requires = ["numpy >= 1.7.0"]

requirements = [
    "bokeh",
    "pymongo",
    "characteristic",
    "click",
    "pandas",
    "theano",
    "scipy",
    "scikit-learn"
]

setup(
    name=DISTNAME,
    author=AUTHOR,
    author_email=EMAIL,
    description=DESCRIPTION,
    license=LICENSE,
    url=URL,
    download_url=DOWNLOAD_URL,
    classifiers=CLASSIFIERS,
    keywords=KEYWORDS,
    long_description=LONG_DESCRIPTION,
    version=versioneer.get_version(),
    cmdclass=versioneer.get_cmdclass(),
    platforms="any",
    setup_requires=build_requires,
    install_requires=build_requires + requirements,
    entry_points={
        "console_scripts": [
            "adla = adla.loader:main",
            "adlaml = adla.ml.loader:main"
        ]
    },
    packages=find_packages(where="src", exclude=("historical", "test", "specs")),
    package_dir={"": "src"},
    package_data={
        "adla": ["src/adla/config.ini", "src/adla/specs/*.json"]
    },
    ext_modules=[
        Extension(
            "adla.ml.dtw",
            ["src/adla/ml/dtw.cpp"],
            include_dirs=[resource_filename("numpy", "core/include")]
        )
    ]
)
...

EDIT 有关更多信息,这里是 build_py 步骤 运行 本身的输出。

(devel)> $ python3 setup.py --verbose build_py
running build_py
creating build
creating build/lib.macosx-10.11-x86_64-3.5
creating build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/__init__.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/_version.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/analysis.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/commands.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/inspection.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/loader.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/modification.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/rbi.py -> build/lib.macosx-10.11-x86_64-3.5/adla
copying src/adla/util.py -> build/lib.macosx-10.11-x86_64-3.5/adla
creating build/lib.macosx-10.11-x86_64-3.5/adla/ml
copying src/adla/ml/__init__.py -> build/lib.macosx-10.11-x86_64-3.5/adla/ml
copying src/adla/ml/loader.py -> build/lib.macosx-10.11-x86_64-3.5/adla/ml
copying src/adla/ml/meta_model.py -> build/lib.macosx-10.11-x86_64-3.5/adla/ml
copying src/adla/ml/models.py -> build/lib.macosx-10.11-x86_64-3.5/adla/ml
copying src/adla/ml/util.py -> build/lib.macosx-10.11-x86_64-3.5/adla/ml
UPDATING build/lib.macosx-10.11-x86_64-3.5/None
error: [Errno 2] No such file or directory: 'build/lib.macosx-10.11-x86_64-3.5/None'

不幸的是,我不明白为什么 setuptools 试图找到文件 build/[...]/None。我将不胜感激对错误的一些洞察!

我刚刚自己解决了这个问题。 setup.cfg 中的版本控制变量 versionfile_build 被设置为 None 而不是正确的版本控制版本文件。 setup.cfg中的正确设置供参考。

[versioneer]
VCS = git
style = pep440
versionfile_source = src/adla/_version.py
versionfile_build = adla/_version.py
tag_prefix =
parentdir_prefix = adla-

[pytest]
norecursedirs = .git .vagrant .eggs contrib puppet