我已经能够使用
C#
通过以下方式加载
pythonnet
dll:
from importlib.resources import path
import sys
# Assuming 'my_package.lib' is the sub-package containing the DLLs
with path('pyrp.lib', '') as lib_path:
sys.path.append(str(lib_path))
# Now you can import your dependencies as if they were in the same directory
from pythonnet import load
load('coreclr')
import clr
def load_APIStandard():
clr.AddReference("myDLL")
from myDLL import APIStandard
# Return the imported module or any objects you need from it
return APIStandard
并且我拥有使用 此工具 生成的类型信息。一个例子是
#__init__.pyi
from System import Array_1
from myDLL import AnalysisResult
class APIStandard(abc.ABC):
@staticmethod
def AnalyzeData(data: Array_1[int]) -> AnalysisResult: ...
如果编辑我的VSCode,我可以让这个类型信息正确显示
settings.json
"python.analysis.extraPaths": [
"./pyrp/lib/PythonTypes" // Add the path to your "types" directory here, adjust the path as necessary
]
但是无论我如何将这些类型打包到pip包中,我都无法让解释器在本地找到它们。有什么建议么?
要将 Python.NET DLL 类型信息打包到 pip 包中,并使其自动被解释器识别,你需要进行以下步骤:
1. 项目结构:
确保你的项目具有以下结构:
your_package/
├── your_package/
│ ├── __init__.py
│ ├── lib/
│ │ ├── PythonTypes/
│ │ │ ├── __init__.pyi
│ │ │ ├── myDLL.pyi
│ │ ├── your_dlls.dll
│ └── ... other modules
├── setup.py
└── ... other files
2. setup.py:
在你的
setup.py
文件中,你需要使用
package_data
参数来包含类型信息文件。例如:
from setuptools import setup, find_packages
setup(
name='your_package',
version='0.1.0',
packages=find_packages(),
package_data={
'your_package': ['lib/PythonTypes/*.pyi']
},
install_requires=[
'pythonnet',
# ... other dependencies
],
zip_safe=False,
)
3. init .py:
在你的包的
__init__.py
文件中,你需要在导入其他模块之前将
PythonTypes
目录添加到 Python 路径中。可以使用
pkg_resources
模块来实现:
import pkg_resources
import sys
# 获取安装包的路径
resource_package = __name__ # 使用当前包的名称
# 获取 PythonTypes 目录的路径
resource_path = 'lib/PythonTypes'
python_types_path = pkg_resources.resource_filename(resource_package, resource_path)
# 将路径添加到 sys.path
if python_types_path not in sys.path:
sys.path.append(python_types_path)
# 现在你可以导入其他模块,包括类型信息
from .lib import load
load('coreclr')
# ... 其他导入
4. 打包和安装:
使用以下命令构建和安装你的包:
python setup.py sdist bdist_wheel
pip install dist/your_package-0.1.0-py3-none-any.whl
完成这些步骤后,解释器应该能够自动找到并使用你提供的类型信息。
注意:
-
确保你的
.pyi
文件位于正确的目录中,并且文件名与相应的 DLL 文件名匹配。 -
在开发过程中,你可能需要清除缓存或使用
pip install --upgrade --force-reinstall your_package
来确保安装了最新的更改。
希望这些步骤能够帮助你在 pip 包中分发 Python.NET DLL 类型信息。 如果还有其他问题,请随时提出。
标签:python,types,pip From: 78785682