es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La opción ‘universal’ no está funcionando en las ruedas.

Estoy intentando crear una rueda universal para un paquete de extensión de Python desde mi máquina Linux para poder instalarlo fácilmente en Windows.

Mi setup.py es el siguiente:

from distutils.core import setup, Extension
import numpy.distutils.misc_util
import setuptools

with open('README.md', 'r') as f:
    readme = f.read()

with open('LICENSE', 'r') as f:
    license = f.read()

with open('VERSION', 'r') as f:
    version = f.read()

ext_modules = [
    Extension(
        'pylbfgs',
        sources=['pylbfgs.c'],
        libraries=['lbfgs'],
        library_dirs=['/usr/local/lib'],
        include_dirs=['/usr/local/include'] + (
            numpy.distutils.misc_util.get_numpy_include_dirs()
        ),
        runtime_library_dirs=['/usr/local/lib'],
        ),
    ]

setup(
    name='PyLBFGS',
    version=version,
    author='Robert Taylor',
    author_email='rtaylor@pyrunner.com',
    url='https://bitbucket.org/rtaylor/pylbfgs',
    description=(
        'PyLBFGS es un envoltorio de Python 3 para la biblioteca libLBFGS escrita por Naoaki Okazaki.'
        ),
    long_description=readme,
    license=license,
    install_requires=['numpy'],
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: MIT License',
        'Natural Language :: English',
        'Programming Language :: C',
        'Programming Language :: Python :: 3',
        'Topic :: Scientific/Engineering',
        'Topic :: Software Development',
        ],
    ext_modules=ext_modules,
    options={"bdist_wheel": {"universal": True}}
)

Mi setup.cfg es el siguiente:

[bdist_wheel]
universal = 1

Y estoy ejecutando python setup.py bdist_wheel --universal. Actualmente estoy utilizando las 3 opciones que se pueden utilizar para crear una rueda universal, pero aún así mi resultado es PyLBFGS-0.1-cp39-cp39-linux_x86_64.whl.

¿Alguna idea de cuál es el problema?

Estoy utilizando:
– Ubuntu Impish
– Python 3.9
– Cython 0.29.26
– setuptools 60.2.0

Aquí está el proyecto:
https://bitbucket.org/rtaylor/pylbfgs/src/master/

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que los archivos setup.py y setup.cfg están configurados correctamente para crear una rueda universal. Sin embargo, el nombre del archivo de salida indica que solo es compatible con sistemas operativos Linux x86 de 64 bits. Esto sugiere que el problema puede estar en la biblioteca LBFGS que se está utilizando en el módulo de extensión.

    Dado que LBFGS es una biblioteca en C, puede ser necesario compilarla por separado para cada plataforma objetivo (es decir, Linux y Windows) para asegurarse de que sea compatible con ambas. Una vez que se haya compilado la biblioteca, se puede vincular al módulo de extensión de Python durante el proceso de compilación.

    Otra posibilidad es que el paquete distutils no esté correctamente configurado para compilaciones multiplataforma. Este paquete es responsable de compilar y vincular código C durante el proceso de compilación, por lo que cualquier problema con él podría evitar la creación de una rueda verdaderamente universal. Puede valer la pena investigar si hay algún problema con distutils o su configuración en Ubuntu que pueda estar causando este problema.

Comments are closed.