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.

Módulo de importación instalado en venv.

Estoy tratando de llamar a un módulo personalizado instalado en mi entorno virtual. El módulo que he creado tiene la siguiente estructura:

test
├── README.md
├── setup.py
├── src
│   ├── __init__.py
│   └── module_x
│       └── abc.py
└── tests

El archivo setup.py se ve de la siguiente manera:

from setuptools import find_packages, setup

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

setup(
    name='test',
    version='0.1.0',
    author='me',
    description='description',
    long_description=long_description,
    long_description_content_type='text/markdown',
    packages=find_packages('src'),
    package_dir={'': 'src'},
    install_requires=[],
    entry_points={
        'console_scripts': [
            'test=module_x.abc:main'
        ],
    }
)

Dentro de abc.py, estoy usando el siguiente código:

class RandomClass:

    def __init__(self, msg):
        self.msg = msg
        info()

    def info():
        print(self.msg)

def main(msg):
    RandomClass(msg)

init.py se ve así:

from .module_x.abc import main

El paquete fue instalado usando pip install -e ..

ACTUALIZADO

¿Cómo puedo llamar al módulo en un nuevo script de Python como from test import main? Actualmente funciona solo como from test.src import main y no quiero conocer toda la estructura del paquete. En el futuro, también existirán module_y, module_z, etc. Mi suposición es que tendría que modificar algo en el setup.py.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para poder importar la función main del paquete instalado test con from test import main, debes modificar el archivo setup.py. Debes agregar el módulo test a la lista de packages y eliminar el argumento package_dir. Por ejemplo, el archivo setup.py modificado se vería así:

    from setuptools import find_packages, setup
    
    with open('README.md', 'r') as f:
        long_description = f.read()
    
    setup(
        name='test',
        version='0.1.0',
        author='yo',
        description='descripción',
        long_description=long_description,
        long_description_content_type='text/markdown',
        packages=find_packages(),
        install_requires=[],
        entry_points={
            'console_scripts': [
                'test=module_x.abc:main'
            ],
        }
    )
    

    Después de modificar el archivo setup.py, debes reinstalar el paquete con pip install -e .. Ahora, puedes importar la función main del módulo test con from test import main.

Comments are closed.