2012-08-30 31 views
9

tôi có một dự án như thế này:file add dữ liệu cho các dự án 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 
... 

và bên trong tập tin của tôi Virastar.py cần một số dữ liệu từ data.untouchable.dat. nó hoạt động tốt cho đến khi tôi cài đặt các dự án với setup.py này:

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', 
     ], 
    }, 
    ... 
) 

sau đó khi tôi bắt đầu chương trình của tôi và khi nó cần dữ liệu tập tin nó trả về lỗi này:

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

ngay cả trong nguồn egg-info của tôi Tôi không thể tìm thấy bất kỳ tệp dữ liệu nào:

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

tôi có bỏ sót gì ở đây không?

Cảm ơn tất cả.

CHỈNH SỬA: Tôi có phải thêm bất kỳ điều đặc biệt nào vào init .py?

và tôi có để thêm video này: Tôi sử dụng untouchable.dat chỉ như thế này:

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

trong python 2.7 họ thay đổi cách thức để bao gồm các tập tin để MANIFEST.in hoặc một cái gì đó - Tôi không chắc chắn và không sử dụng nó nhưng nó có thể là một hướng – zenpoy

+0

Tôi đang ở python 2,6! và vì một số lý do tôi không thể nâng cấp ngay bây giờ! – Shahinism

Trả lời

6

Vấn đề đầu tiên là tôi đã không nhập khẩu tập tin dữ liệu của tôi vào gói với MANIFEST.in tệp. Tôi đã nhập nó như sau:

include negar/data/*.dat 

Sau đó, tệp dữ liệu của tôi đã được nhập với gói cài đặt của tôi. nhưng vì tôi đã có lỗi trong việc mở các tệp dữ liệu của mình, python không thể tìm thấy nó. câu hỏi này đã giúp tôi tìm ra đúng cách Python Access Data in Package Subdirectory và bây giờ tôi sử dụng một cái gì đó như thế này:

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

Có thể thử:

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

Không, nó không hoạt động trở lại! cùng một lỗi. – Shahinism

6

tôi đã sử dụng data_files

data_files = [('', ['negar/data/untouchable.dat'])], 
Các vấn đề liên quan