Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.1K
Views
tratando de hacer que las rutas funcionen: intento de importación relativa más allá del paquete de nivel superior

no puedo hacer que esto funcione..

Mi estructura es:

 program_name/ __init__.py setup.py src/ __init__.py Process/ __init__.py thefile.py tests/ __init__.py thetest.py

laprueba.py:

 from ..src.Process.thefile.py import sth

Ejecutando: pytest ./tests/thetest.py from program_name da:

ValueError: attempted relative import beyond top-level package

También probé otros enfoques, pero recibo varios errores.

Pero espero que lo anterior funcione.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

ValueError: Intento de importación relativa en no paquete

Indica que está tratando de usar la importación relativa en el módulo, que se usará para paquetes, es decir, para convertirlo en un paquete, agregue __init__.py y llame a thetest.py desde algún archivo fuera del paquete. Ejecutar directamente thetest.py desde el intérprete no funcionará.

Las importaciones relativas requieren que el módulo que las utiliza se importe como módulo de paquete.


Sugerencia 1 :

El directorio de tests actual tiene un archivo __init__.py , pero eso no le permite ejecutarlo como un módulo (a través de shell); para que su importación actual (relativa) funcione, debe importarla en un externo (al paquete) archivo/módulo: creemos un main.py (puede nombrarlo como desee):

 main.py program_name/ __init__.py setup.py src/ __init__.py Process/ __init__.py thefile.py tests/ __init__.py thetest.py

src/Process/ thefile.py :

 s = 'Hello world'

pruebas/ laprueba.py :

 from ..src.Process.thefile import s print s

principal.py :

 from program_name.tests.thetest import s

Ejecutando main.py :

 [nahmed@localhost ~]$ python main.py Hello world

Sugerencia 2 :

Ejecute el archivo justo encima del directorio raíz, es decir, un nivel por encima de program_name/ , de la siguiente manera:

 [nahmed@localhost ~]$ python -m program_name.tests.thetest Hell World

PD las importaciones relativas son para paquetes, no para módulos.

over 4 years ago · Santiago Trujillo Report

0

Acabo de resolver un problema similar con un montón de google. Aquí hay dos soluciones sin cambiar el estructurador de archivos existente:

1

La forma de importar un módulo desde la carpeta principal from ..src.Process.thefile.py import sth se denomina "importación relativa".

Solo se admite cuando se inicia como un paquete desde el paquete de nivel superior. En su caso, eso es iniciar la línea de comando desde el directorio que contiene program_name/ y type (para el entorno win)

 python -m program_name.tests.thetest

o simplemente (útil para muchos archivos pytest):

 python -m pytest

2

De lo contrario, cuando intente ejecutar un script solo o desde un paquete que no sea de nivel superior, puede agregar manualmente el directorio a PYTHONPATH en tiempo de ejecución.

 import sys from os import path sys.path.append(path.dirname(path.dirname(path.abspath(__file__)))) from src.Process.thefile import s

Pruebe primero el primero para ver si es compatible con el marco pytest. De lo contrario, el segundo siempre debería resolver el problema.

Referencia ( Cómo arreglar "Intento de importación relativa en un paquete que no es" incluso con __init__.py )

over 4 years ago · Santiago Trujillo Report

0

Al importar un archivo, Python solo busca en el directorio actual, el directorio desde el que se ejecuta el script de punto de entrada. puede usar sys.path para incluir diferentes ubicaciones

 import sys sys.path.insert(0, '/path/to/application/app/folder') import thefile
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!