python - Empaquetado de archivos
pycharm anaconda (1)
Digamos que tengo un paquete muy simple con la siguiente estructura:
.
├── foo
│ ├── bar
│ │ └── __init__.py
│ └── __init__.py
└── setup.py
Contenido de los archivos:
setup.py
:from distutils.core import setup setup( name=''foobar'', version='''', packages=[''foo'', ''foo.bar''], url='''', license=''Apache License 2.0'', author=''foobar'', author_email='''', description='''' )
foo/bar/__init__.py
:def foobar(x): return x
Los archivos restantes están vacíos.
Instalo el paquete usando pip
:
cd foobar
pip install .
y puede confirmar que está instalado correctamente.
Ahora quiero crear un paquete separado con archivos de código auxiliar:
.
├── foo
│ ├── bar
│ │ └── __init__.pyi
│ └── __init__.pyi
└── setup.py
Contenido de los archivos:
setup.py
:from distutils.core import setup import sys import pathlib setup( name=''foobar_annot'', version='''', packages=[''foo'', ''foo.bar''], url='''', license=''Apache License 2.0'', author=''foobar'', author_email='''', description='''', data_files=[ ( ''shared/typehints/python{}.{}/foo/bar''.format(*sys.version_info[:2]), ["foo/bar/__init__.pyi"] ), ], )
foo.bar.__init__.pyi
:def foobar(x: int) -> int: ...
Puedo instalar este paquete, ver que crea anaconda3/shared/typehints/python3.5/foo/bar/__init__.pyi
en mi raíz de Anaconda, pero parece que PyCharm no lo reconoce (no recibo ninguna advertencia) . Cuando pyi
archivo pyi
en el paquete principal, todo funciona bien.
Agradecería cualquier consejo sobre cómo hacer que esto funcione:
- He estado intentando darle sentido al PEP 484: almacenar y distribuir archivos de código auxiliar pero sin éxito. Incluso la parte de
pathlib
parece ofender mi versión dedistutils
- PY-18597 y https://github.com/python/mypy/issues/1190#issuecomment-188526651 parecen estar relacionados pero de alguna manera no puedo conectar los puntos.
- Intenté colocar
.PyCharmX.X/config/python-skeletons
en el.PyCharmX.X/config/python-skeletons
pero no sirvió de nada.
Algunas cosas que funcionan, pero no resuelven el problema:
- Poner archivos de resguardo en el proyecto actual y marcarlos como fuentes.
- Agregar la raíz del paquete de código auxiliar a la ruta del intérprete (al menos en algunos casos simples).
Entonces, las preguntas: cómo crear un paquete mínimo y distribuible con apéndices de Python, que será reconocido por las herramientas existentes . Basado en los experimentos sospecho uno de dos problemas:
-
shared/typehints/pythonX.Y
mal la estructura que debería ser creada por el paquete en losshared/typehints/pythonX.Y
. Si esto es cierto, ¿cómo debo definir losdata_files
? - PyCharm no considera estos archivos en absoluto (esto parece ser contradicho por algunos comentarios en el tema vinculado).
- Se supone que funciona bien, pero cometí un error de configuración y busqué un problema externo que no existe.
- ¿Hay algún procedimiento establecido para solucionar problemas como este?
El problema es que no incluyó el archivo foo/__init__.pyi
en su distribución de código auxiliar. Aunque está vacío, foo
un paquete de archivos de código auxiliar y permite la búsqueda de foo.bar
.
Puede modificar los data_files
de data_files
en su setup.py
para incluir ambos
data_files=[
(
''shared/typehints/python{}.{}/foo/bar''.format(*sys.version_info[:2]),
["foo/bar/__init__.pyi"]
),
(
''shared/typehints/python{}.{}/foo''.format(*sys.version_info[:2]),
["foo/__init__.pyi"]
),
],