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.

No se puede importar la versión (en setup.py)

Hay un problema con la importación del módulo de versión, y no puedo averiguarlo.
Árbol de mi proyecto:

├── install.sh
├── README.md
├── setup.py
└── src
    ├── __init__.py
    ├── tankduels.py
    ├── Tanks.txt
    └── version.py

setup.py:

#!/usr/bin/python

from setuptools import setup
from src.version import version

setup(
    name='tankduels',
    version=version,
    description='Juego de consola',
    # descripción extendida='El jugador elige su tanque y el tanque enemigo.',
    # paquetes=['src'],
    # instalar_requiere=[],
    directorio_de_paquetes={'': 'src'},
    puntos_de_entrada={"console_scripts": ["tankduels = tankduels:main"]},
)

version.py:

__version__="1.0"

Si ejecuto este comando: python3 setup.py bdist_rpm (estoy en Fedora). Obtengo el siguiente traceback:

Traceback (most recent call last):
  File "/home/commrat/projects/tank-duels/build/bdist.linux-x86_64/rpm/BUILD/tankduels-1.0/setup.py", line 4, in <module>
    from src.version import __version__
ModuleNotFoundError: No module named 'src.version'
error: Status de salida incorrecto de /var/tmp/rpm-tmp.joaIdn (%build

¿Qué estoy haciendo mal? Realmente no lo entiendo, porque si ejecuto esto: python3 setup.py --version mostrará una buena salida:
1.0

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema es que el directorio src no está siendo incluido en PYTHONPATH cuando se ejecuta el script setup.py, por lo que python no puede encontrar el módulo version.

    Para solucionar este problema, podemos agregar el directorio src a PYTHONPATH antes de la importación del módulo version en el script setup.py. Podemos hacer esto agregando las siguientes líneas al inicio de setup.py:

    import os
    import sys
    sys.path.insert(0, os.path.abspath('src'))
    

    Esto insertará la ruta absoluta del directorio src al principio de la lista sys.path, por lo que python buscará módulos allí primero.

    El script setup.py modificado debería verse así:

    #!/usr/bin/python
    
    import os
    import sys
    sys.path.insert(0, os.path.abspath('src'))
    from setuptools import setup
    from src.version import __version__
    
    setup(
        name='tankduels',
        version=__version__,
        description='Console game',
        # long_description='Player choose his and enemy tank. ',
        # packages=['src'],
        # install_requires=[],
        package_dir={'':'src'},
        entry_points={"console_scripts": ["tankduels = tankduels:main"]},
    )
    

    Después de realizar este cambio, ejecutar python3 setup.py bdist_rpm debería funcionar sin errores.

Comments are closed.