2009-03-04 26 views
11

Tôi đang cố gắng đưa một dự án Python vào một tarball bằng cách sử dụng các công cụ thiết lập. Vấn đề là setuptools không xuất hiện giống như cách mà cây nguồn ban đầu được thiết lập (không phải bởi tôi, tôi phải thêm). Mọi thứ mà tôi thực sự muốn phân phối đều nằm trong thư mục cấp cao nhất, chứ không phải trong thư mục con như tài liệu setuptools nói về.Loại trừ thư mục cấp cao nhất khỏi gói cài đặt

Cây có thư mục, tests, mà tôi không muốn có trong gói phát hành. Tuy nhiên, sử dụng exclude_package_data dường như không thực sự làm bất kỳ loại trừ nào và tôi muốn tìm ra những gì tôi đã làm sai.

setup.py của tôi trông như thế này, một phần có liên quan:

setup(
    name="project", 
    packages=[''], 
    include_package_data=True, 
    exclude_package_data={'': ['tests']}, 
    test_suite='nose.collector', 
) 

Trả lời

4

Tất, setuptools làm thực sự khó khăn :(

Tôi không biết nếu điều này là những gì bạn muốn, nhưng một dự án này tôi làm việc trên sử dụng một sự kết hợp của hai yếu tố:

from setuptools import setup, find_packages 
... 
packages = find_packages(exclude=['tests']), 
data_files = os.walk(path_to_files), 
1

Đối với mục đích tương tự, đồng nghiệp của tôi đã viết setuptools-giả gói: http://github.com/ella/setuptools-dummy/tree/master

0.123.

Hãy xem setuptools_dummy, sửa đổi không bao gồm theo nhu cầu của bạn và nó sẽ hoạt động. Nếu không, hãy mở một vấn đề;)

9

Chúng tôi sử dụng quy ước sau đây để loại trừ 'kiểm tra' khỏi gói.

setup(
    name="project", 
    packages=find_packages(exclude=("tests",)), 
    include_package_data=True, 
    test_suite='nose.collector', 
) 

Chúng tôi cũng sử dụng MANIFEST.in để kiểm soát tốt hơn nội dung 'include_package_data = True'.

Trân trọng, Martin.

+1

Rất kỳ lạ, bằng cách sử dụng 'exclude =()' là không đủ đối với tôi. Theo http://stackoverflow.com/a/11669299/472876, tôi đã phải sử dụng 'các bài kiểm tra loại trừ đệ quy * 'trong' MANIFEST của tôi.in' để thành công. – HeyWatchThis

2

Tôi có sau trong setup.py tôi ...

setup(name='pyfoo', 
     version="1.0.2", 
     description='Example for stack overflow', 
     url='http://stackoverflow.com/', 
     author='David Michael Pennington', 
     author_email='mike /|at|\ pennington.net', 
     license='GPL', 
     platforms='any', 
     keywords='Stack Overflow Example', 
     entry_points = "", 
     long_description=read('README.rst'), 
     include_package_data=True, # Checks MANIFEST.in for explicit rules 
     #     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
     packages=find_packages(), 
     use_2to3=True, 
     zip_safe=False, 
     setup_requires=["setuptools_hg"], 

Tôi đã có một thư mục doc/ rằng đã nhận được lớn do số lượng hình ảnh tôi đã có trong nó; điều này có nghĩa là kích thước của sdist của tôi đã tăng hơn 500kB. Ban đầu tôi đã có trong MANIFEST.in tôi ...

include LICENSE CHANGES README.rst requirements.txt 
recursive-exclude * __pycache__ 
recursive-exclude * *.pyc 
recursive-exclude * *.pyo 
recursive-exclude * *.orig 

Điều duy nhất tôi phải làm gì để loại trừ thư mục doc của tôi là dòng này ở dưới cùng của MANIFEST.in ...

prune doc* 

Sử dụng prune doc* đột ngột đã xóa tất cả thư mục doc/ của tôi khỏi tarball sdist. Vì vậy, có vẻ như bạn chỉ cần sử dụng điều này trong một file MANIFEST.in ...

prune tests* 
5

Đây là những gì tôi tìm thấy trong setuptools manual:

from setuptools import setup, find_packages 
... 
packages = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]), 

Trong trường hợp của tôi sau đây là đủ để loại trừ đầu thư mục kiểm tra -level:

packages = find_packages(exclude=["tests.*", "tests"]), 
Các vấn đề liên quan