2016-02-01 18 views
5

Tôi đã tìm thấy nhiều nguồn (https://docs.python.org/3/distutils/sourcedist.html#specifying-the-files-to-distribute, http://blog.ionelmc.ro/2014/05/25/python-packaging/, http://blog.ionelmc.ro/2014/06/25/python-packaging-pitfalls/) đề xuất cách phân phối tệp dữ liệu trong gói Python là sử dụng tùy chọn include_package_data của setuptools và MANIFEST.in. Các tập tin trong gói của tôi như vậy, như thế nào,Cài đặt tập tin dữ liệu bên trong virtualenv ở đâu?

setup.py

setup( # ... include_package_data = True, # ... với phần còn lại của tập tin (hy vọng không liên quan) elided.

MANIFEST.IN

graft testdata include ChangeLog include README.rst include COPYING include COPYING.LESSER include tox.ini

Khi tôi chạy setup.py install hoặc sử dụng pip trong một virtualenv, tôi kết thúc với nguồn Python tập tin bản thân, nhưng không có bất cứ nơi nào testdata/ tôi có thể tìm thấy nó. Tôi nghĩ rằng đây là lỗi trong bao bì của tôi, ngoại trừ khi tôi lấy một gói khác có bố cục tương tự, tôi cũng không thể tìm thấy tệp dữ liệu. Nếu tôi sao chép kho lưu trữ cho gói ví dụ https://github.com/ionelmc/python-nameless và cài đặt nó bằng cách sử dụng setup.py install, gói cài đặt trong thư mục lib/python3.4/site-packages/nameless-0.1.0-py3.4.egg/nameless/. Tuy nhiên, tôi không thể tìm thấy bất kỳ tệp dữ liệu hoặc kiểm tra nào ở bất kỳ đâu trong virtualenv. Họ phải kết thúc ở đâu? Công việc này dự định làm như thế nào nhỉ?

Động lực của tôi để đặt câu hỏi này là một cộng tác viên khác trên dự án muốn thử nghiệm, yêu cầu các tệp dữ liệu, để chạy từ cài đặt pip. Đây có phải là cách tiếp cận đúng ngay từ đầu không?

+0

Sử dụng 'pkg_resources' để khám phá tệp dữ liệu của bạn. Xem [answer] (http://stackoverflow.com/a/34788912/3626079) của tôi cho câu hỏi tương tự. – ziky

Trả lời

0

hiểu biết của tôi là bạn nên chỉ

include testdata

thay vì graft ing nó - phải trung thực, tôi thực sự không chắc chắn những gì graft làm.

Ngoài ra tôi không tin rằng cần phải chỉ định include_package_data = True tại tất cả

+0

'include' bao gồm các tệp phù hợp với mẫu, không phải thư mục. Theo tôi biết, điều này chỉ được giải thích trong tài liệu cũ: https://docs.python.org/3/distutils/commandref.html. (Nếu nó được giải thích trong tài liệu không kế thừa, tôi không biết đâu.) 'Graft' bao gồm toàn bộ các thư mục. Trong cả MANIFEST.in của tôi và gói ví dụ, 'include' được sử dụng cho các tệp riêng lẻ và tôi cũng không thể tìm thấy các tệp đó trong virtualenv. Tôi đã thử 'đệ quy-bao gồm' trên' testdata/'là tốt, và điều đó không hoạt động. – ceridwen

+0

Tôi đã đối mặt với một vấn đề tương tự ngày hôm qua. Trước đây tôi đã lưu trữ bằng tay COPYING và LICENSE trong '/ etc/nepi' nhưng điều đó đã bị phá vỡ dưới virtualenv. Bây giờ (xem [git repo của tôi ở đây] (http://git.onelab.eu/?p=nepi.git;a=tree)) mọi thứ chỉ chạy tốt. Nếu bạn không thấy bất kỳ tệp nào được bao gồm, tôi nghi ngờ có điều gì khác đang xảy ra. Ngoài ra tôi đã thấy các ví dụ về 'include' được sử dụng với một thư mục nhưng không có bằng chứng cho thấy nó sẽ hoạt động. Tôi đồng ý rằng tài liệu về điều này không chính xác rõ ràng :) – parmentelat

Các vấn đề liên quan