2012-04-02 31 views
19

Tôi đã viết một mô-đun mở rộng Python trong C++. Tôi định phân phối mô-đun với các công cụ thiết lập. Sẽ có bản phân phối nhị phân cho Windows 32 và 64 bit (được xây dựng với setup.py bdist_egg) và phân phối nguồn cho các nền tảng giống UNIX (được xây dựng với setup.py sdist).Làm cách nào để đưa tệp giấy phép vào tập lệnh setup.py?

Tôi định cấp phép mô-đun theo giấy phép BSD. Trong cây nguồn của tôi, tệp LICENSE.txt nằm trong thư mục trên cùng cùng với setup.py. Tôi nên bao gồm nó trong gói cài đặt như thế nào?

Tôi đã thử các script setup.py sau:

from setuptools import setup, Extension 
from glob import glob 

setup(
    name = 'Foo', 
    version = '0.1.0', 
    ext_modules = [Extension('Foo', glob('Source/*.cpp'))], 
    package_data = {'': ['LICENSE.txt']} 
) 

Nó không làm việc, các tệp giấy phép không bao gồm trong gói cài đặt. Có thể do tệp setup.py không xác định bất kỳ gói nào, chỉ một mô-đun tiện ích mở rộng.

Làm cách nào để khắc phục sự cố này?

Trả lời

12

Sử dụng data_files:

setup(
    name = "Foo", 
    version = "0.1.0", 
    ext_modules = [Extension("Foo", glob("Source/*.cpp"))], 
    data_files = [("", ["LICENSE.txt"])] 
) 

Hai nhận xét:

  1. Không cần phải trực tiếp xuất xưởng một giấy phép với sản phẩm của bạn, bạn có thể sử dụng license metadata trong distutils chỉ định này.

  2. Không sử dụng hỗn hợp đơn báo giá và hai dấu ngoặc kép trong mã của bạn :)

+0

"LICENSE.txt" phải là ["LICENSE.txt"]. Đường dẫn "/" là hệ thống gốc trên UNIX và không tồn tại trên Windows; khi tôi thử nghiệm trên Windows, tôi nhận được thông báo lỗi về một đường dẫn không tồn tại. Thay vào đó, việc sử dụng "" dường như hoạt động; khi tôi kiểm tra LICENSE.txt đã kết thúc trong thư mục "C: \ Python27 \ Lib \ site-packages \ Foo-0.1.0-py2.7-win32.egg", cùng thư mục với Foo.pyd – user763305

+0

@ user763305: I chỉnh sửa câu trả lời của tôi với nhận xét của bạn, xin lỗi. Nếu câu trả lời của tôi giải quyết được vấn đề của bạn, hãy xem xét đánh dấu nó như được chấp nhận bằng cách nhấp vào dấu kiểm ở bên trái câu trả lời của tôi. – orlp

-1

Ví dụ:

setup(
    ... 
    license="ZPL", 
    classifiers=[ 
     ... 
     'License :: OSI Approved :: Zope Public License', 
     ... 
     ], 
    ...) 

bổ sung bạn có thể chèn văn bản giấy phép của bạn vào 'long_description' :

setup(
    ... 
    long_description="Package description. \nLicense Text", 
    ...) 
+2

Làm cách nào để bao gồm giấy phép _file_ ở bất kỳ đâu? – mbdevpl

-1

Viết setup.cfg tệp và trong đó chỉ định:

[metadata] 
license_file = LICENSE.txt 
+1

Không hoạt động .. – user

+0

@user Yea, tôi đoán nó chỉ làm điều đó cho tập tin bánh xe tạo ra tức là khi bạn chạy: 'python setup.py bdist_wheel' https://wheel.readthedocs.io/en/stable/# bao gồm cả giấy phép-in-the-generated-wheel-file –

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