簡體   English   中英

setup.py sdist 排除子目錄中的包

[英]setup.py sdist exclude packages in subdirectory

我有以下要打包的項目結構:

├── doc
│   └── source
├── src
│   ├── core
│   │   ├── config
│   │   │   └── log.tmpl
│   │   └── job
│   ├── scripts
│   └── test
└── tools

我想在src下打包core但排除test 這是我嘗試失敗的方法:

      setup(name='core',
      version=version,  
      package_dir = {'': 'src'}, # Our packages live under src but src is not a package itself
      packages = find_packages("src", exclude=["test"]), # I also tried exclude=["src/test"]
      install_requires=['xmltodict==0.9.0',
                        'pymongo==2.7.2',
                        'ftputil==3.1',
                        'psutil==2.1.1',
                        'suds==0.4',
                        ],
      include_package_data=True,
      )

我知道我可以使用 MANIFEST.in 文件排除test ,但如果您能告訴我如何使用setupfind_packages執行此操作,我會很高興。

更新:

經過更多的test后,我意識到使用python setup.py install構建包符合我的預期(也就是說,它不包括test )。 但是,發出python setup.py sdist會導致包含所有內容(即,它忽略我的 exclude 指令)。 我不知道這是錯誤還是功能,但仍然有可能使用MANIFEST.in排除sdist文件。

find_packages("src", exclude=["test"])有效。
訣竅是刪除陳舊的文件,例如core.egg-info目錄。 在您的情況下,您需要刪除src/core.egg-info

這是我使用過的setup.py

from setuptools import setup, find_packages

setup(name='core',
      version='0.1',
      package_dir={'':'src'},
      packages=find_packages("src", exclude=["test"]), # <- test is excluded
      ####packages=find_packages("src"), # <- test is included
      author='J.R. Hacker',
      author_email='jr@example.com',
      url='http://stackoverflow.com/q/26545668/4279',
      package_data={'core': ['config/*.tmpl']},
)

要創建分配,請運行:

$ python setup.py sdist bdist bdist_wheel

要啟用后一個命令,請運行: pip install wheel

我檢查了創建的文件。 它們不包含test但包含core/__init__.pycore/config/log.tmpl文件。

在項目根目錄的MANIFEST.in中,添加

prune src/test/

然后用python setup.py sdist構建包

我可能只是使用find_packages文檔中定義的通配符 *test**tests*是我傾向於使用的東西,因為我們只保存帶有test一詞的test文件名。 簡單易行^-^。

setup(name='core',
  version=version,  
  package_dir = {'': 'src'}, # Our packages live under src but src is not a package itself
  packages = find_packages("src", exclude=['*tests*']), # I just use wild card. Works perfect ^-^
  install_requires=['xmltodict==0.9.0',
                    'pymongo==2.7.2',
                    'ftputil==3.1',
                    'psutil==2.1.1',
                    'suds==0.4',
                    ],
  include_package_data=True,
  )

供參考:

我還建議將以下內容添加到.gitignore

build
dist
pybueno.egg-info

並將構建和推送包移動到 pypi 或您的私有存儲庫位到 CI/CD 中,使整個設置看起來干凈整潔。

假設您的文件夾名為tests而不是test ,它應該使用以下代碼:

  setup(name='core',
  version=version,  
  package_dir = {'': 'src'}, # Our packages live under src but src is not a package itself
  packages = find_packages('src', exclude=['tests'])
  install_requires=['xmltodict==0.9.0',
                    'pymongo==2.7.2',
                    'ftputil==3.1',
                    'psutil==2.1.1',
                    'suds==0.4',
                    ],
  include_package_data=True,
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM