2012-08-30 21 views
9

que tienen un proyecto como este:archivos de datos se suman a proyectos python setup.py

├── CHANGES.txt 
├── LICENSE 
├── MANIFEST.in 
... 
├── docs 
│   └── index.rst 
├── negar 
│   ├── Negar.py 
│   ├── Virastar.py 
│   ├── Virastar.pyc 
│   ├── __init__.py 
│   ├── data 
│   │   ├── __init__.py 
│   │   └── untouchable.dat 
│   ├── gui.py 
│   ├── gui.pyc 
│   ├── i18n 
│   │   ├── fa_IR.qm 
│   │   └── fa_IR.ts 
│   └── negar.pro 
├── setup.py 
... 

y en el interior que mi archivo de Virastar.py necesitan algunos datos de data.untouchable.dat. funciona bien hasta que se instala el proyecto con este setup.py:

setup(
    ... 
    include_package_data=True, 
    packages = find_packages() + ['negar'], 
    package_dir={'negar': 'negar'}, 
    package_data={'negar': ['data/*.dat']}, 
    entry_points={ 
     'console_scripts': [ 
      'negar = negar.Negar:main', 
     ], 
    }, 
    ... 
) 

después de eso cuando comienzo mi programa y cuando se necesita ese archivo de datos que devuelve este error:

IOError: [Errno 2] No such file or directory: 'data/untochable.dat' 

incluso en mis egg-info fuentes No puedo encontrar ningún archivo de datos:

... 
negar/Negar.py 
negar/Virastar.py 
negar/__init__.py 
negar/gui.py 
negar/data/__init__.py 

¿Se ha perdido algo aquí?

Gracias a todos.

EDITAR: ¿Debo agregar algo especial en init .py?

y tengo que añadir lo siguiente: Yo solía untouchable.dat como este:

f = codecs.open('data/untouchable.dat', encoding="utf-8") 
+0

en Python 2.7 cambiaron la manera de incluir los archivos a MANIFEST.in o algo - No estoy seguro y no lo usé pero podría ser una dirección – zenpoy

+0

¡Estoy en Python 2.6! ¡y por alguna razón no puedo actualizar ahora! – Shahinism

Respuesta

6

El primer problema es que no me importo mi archivo de datos en el paquete con el archivo MANIFEST.in. Lo importé así:

include negar/data/*.dat 

Después de eso, mi archivo de datos ya se importó con mi paquete de instalación. pero como cometí errores al abrir mis archivos de datos, Python no pudo encontrarlos. Esta pregunta me ayudó a encontrar el camino correcto Python Access Data in Package Subdirectory y ahora usar algo como esto:

import os 
this_dir, this_filename = os.path.split(__file__) 
DATA_PATH = os.path.join(this_dir, "data", "data.txt") 
print open(DATA_PATH).read() 
2

quizás tratar:

package_data={'negar/data': ['data/*.dat']}, 
+0

No, no está funcionando de nuevo! mismo error. – Shahinism

Cuestiones relacionadas