[英]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
文件放在主包中時一切正常。
如果有任何提示如何使這項工作,我將不勝感激:
pathlib
部分似乎也冒犯了我的distutils
版本 .PyCharmX.X/config/python-skeletons
放置存根,但它沒有幫助。 一些有用的東西,但不解決問題:
所以問題是: 如何使用Python存根創建一個最小的,可分發的包,這將被現有工具識別 。 根據實驗,我懷疑兩個問題之一:
shared/typehints/pythonX.Y
的包創建的結構 - 如果這是真的,我該如何定義data_files
? 問題是您沒有在存根分發中包含foo/__init__.pyi
文件。 即使它是空的,它使foo
成為存根文件包,並允許搜索foo.bar
。
您可以修改setup.py
的data_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.