簡體   English   中英

打包存根文件

[英]Packaging stub files

假設我有一個非常簡單的包,具有以下結構:

.
├── foo
│   ├── bar
│   │   └── __init__.py
│   └── __init__.py
└── setup.py

文件內容:

  • setup.py

     from distutils.core import setup setup( name='foobar', version='', packages=['foo', 'foo.bar'], url='', license='Apache License 2.0', author='foobar', author_email='', description='' ) 
  • foo/bar/__init__.py

     def foobar(x): return x 
  • 其余文件為空。

我使用pip安裝包:

cd foobar
pip install .

並確認它已正確安裝。

現在我想創建一個包含存根文件的獨立包:

.
├── foo
│   ├── bar
│   │   └── __init__.pyi
│   └── __init__.pyi
└── setup.py

文件內容:

  • setup.py

     from distutils.core import setup import sys import pathlib setup( name='foobar_annot', version='', packages=['foo', 'foo.bar'], url='', license='Apache License 2.0', author='foobar', author_email='', description='', data_files=[ ( 'shared/typehints/python{}.{}/foo/bar'.format(*sys.version_info[:2]), ["foo/bar/__init__.pyi"] ), ], ) 
  • foo.bar.__init__.pyi

     def foobar(x: int) -> int: ... 

我可以安裝這個軟件包,看看它在我的Anaconda根目錄中創建了anaconda3/shared/typehints/python3.5/foo/bar/__init__.pyi ,但它看起來並不像PyCharm認可的那樣(我沒有得到任何警告) 。 當我將pyi文件放在主包中時一切正常。

如果有任何提示如何使這項工作,我將不勝感激:

一些有用的東西,但不解決問題:

  • 將存根文件放在當前項目中並標記為源。
  • 將存根包root添加到解釋器路徑(至少在一些簡單的情況下)。

所以問題是: 如何使用Python存根創建一個最小的,可分發的包,這將被現有工具識別 根據實驗,我懷疑兩個問題之一:

  • 我誤解了應該由shared/typehints/pythonX.Y的包創建的結構 - 如果這是真的,我該如何定義data_files
  • PyCharm根本不考慮這些文件(這似乎與鏈接問題中的一些評論相矛盾)。
  • 它假設工作得很好,但我做了一些配置錯誤,並尋找不存在的外部問題。
  • 是否有任何既定的程序來解決這樣的問題?

問題是您沒有在存根分發中包含foo/__init__.pyi文件。 即使它是空的,它使foo成為存根文件包,並允許搜索foo.bar

您可以修改setup.pydata_files以包含兩者

data_files=[
    (
        'shared/typehints/python{}.{}/foo/bar'.format(*sys.version_info[:2]),
        ["foo/bar/__init__.pyi"]
    ),

    (
        'shared/typehints/python{}.{}/foo'.format(*sys.version_info[:2]),
        ["foo/__init__.pyi"]
    ),
],

暫無
暫無

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

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