gpt4 book ai didi

python - 在构建过程中设置时导入 Egg 功能

转载 作者:行者123 更新时间:2023-12-01 05:49:59 25 4
gpt4 key购买 nike

setup.py我维护的包中的文件,使用另一个包中的代码来构建扩展:

from setuptools import setup, find_packages
from mydependence import build_ext
...
setup(
name='mypackage',
version='1.0.0',
...
setup_requires = [
'mydependence', # is this being checked properly?
],
...
install_requires = [
'mydependence',
],
...
)

我想使用 zc.buildout 构建当前包,所以我创建了一个简单的 buildout.cfg文件如:

[buildout]
parts = python
eggs = mypackage

[python]
recipe = zc.recipe.egg
interpreter = python
eggs = ${buildout:eggs}

不幸的是,当我执行./bin/buildout时,这并没有像我预期的那样工作。和setup.py读完后,它提示 mydependence没有找到。当构建运行我的setup.py时,其 sys.path不知道 eggs 目录下安装的软件包(setuptools 本身除外!)。显然,“eggs”和“develop-eggs”中的软件包不包含在 ./bin/buildout 中。运行包的 setup.py 时的路径.

问题:如何实现这一点?

最佳答案

基本问题是,在调用 setup() 方法之前,您已经从 mydependence 导入。我看不出 setuptools(或就此而言的构建)可以忽略您将得到的 ImportError

如果我查看一些示例代码,例如 http://pythonhosted.org/py2app/examples.html我看到这样的代码:

from setuptools import setup
setup(
app=["MyApplication.py"],
setup_requires=["py2app"],
)

请注意,没有导入 py2app。所以 setup_requires 显然是一种将“扩展”加载到基本 setuptools 功能的方法。这不是规避基本 python 导入错误的方法。

更新:请参阅@MartijnPieters 下面的评论,他在 https://stackoverflow.com/a/12061891/27401 中提供了解决方案.

Martijn 的示例在您的情况下如下所示:

import setuptools

setuptools.dist.Distribution(dict(setup_requires='mydependence'))
# `setup_requires` is parsed and acted upon immediately;
# from here on out the package `mydependence` is installed
# and importable.

from mydependence import build_ext

setup(
...
install_requires = [
'mydependence',
],
....
)

关于python - 在构建过程中设置时导入 Egg 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com