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 xLos 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
pathlibparece 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-skeletonsen el.PyCharmX.X/config/python-skeletonspero 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.Ymal 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"]
),
],