2009-03-04 109 views
11

我正在嘗試使用setuptools將Python項目放入tarball。問題是setuptools似乎不喜歡源樹最初設置的方式(不是我自己,我必須添加)。我實際想要分發的所有內容都位於頂層目錄中,而不是像setuptools文檔所討論的子目錄中。從setuptools包中排除頂級目錄

該樹有一個目錄,tests,我不想在發佈的軟件包中有。但是,使用exclude_package_data似乎實際上沒有排除任何內容,我想解決我做錯了什麼。

setup.py看起來像這樣,在相關部分:

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

回答

4

UG,setuptools的使這個真正棘手:(

我不知道這是不是你想要的,但一個項目,我工作用的兩件事情的組合:

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

我們使用以下約定從軟件包中排除「測試」。

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

我們還使用MANIFEST.in更好地控制'include_package_data = True'的含義。

問候,馬丁。

+1

奇怪的是,使用`exclude =()`對我來說還不夠。根據http://stackoverflow.com/a/11669299/472876,我不得不在``MANIFEST'中使用遞歸 - 排除測試*`。在`爲成功。 – HeyWatchThis 2014-08-12 16:28:33

2

我在setup.py以下...

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"], 

我有一個doc/目錄是由於圖像我在它的數量越來越龐大;這意味着我的sdist的大小增長超過500kB。本來我在MANIFEST.in有這個...

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

我不得不這樣做,以排除我的文檔目錄是這條線在MANIFEST.in底部的唯一的事情...

prune doc* 

使用prune doc*突然從sdist tarball中刪除了我所有的doc/目錄。因此,它看起來像你只需要在MANIFEST.in文件中使用此...

prune tests* 
5

這是我在setuptools manual發現:

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

在我的情況下,下面就足以排除頂部級別測試目錄:

packages = find_packages(exclude=["tests.*", "tests"]),