Pythonnet 缺少 AddReference 方法

问题描述 投票:0回答:3

在Win10 1709 x64 PC上,安装Python 3.7.4 64位和pythonnet-2.4.0-cp37-cp37m-win_amd64.whl。确认 clr.pyd 和 Python.Runtime.dll 存在于:

C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages\

将 My.Assembly.dll 放入:

C:\Users\me\AppData\Local\Programs\Python\Python37\DLLs\

此脚本失败:

import clr
clr.AddReference("My.Assembly")

有错误:

AttributeError:模块“clr”没有属性“AddReference”

当我删除第二行时,导入 clr 成功,因此它找到了 clr.pyd。

这是我当前安装的软件包:

小行星==2.0.4
瓶子==0.12.13
证书==2018.10.15
夏代==3.0.4
色度==0.3.9
柯南==1.9.1
弃用==2.0.6
发行版==1.1.0
紧固件==0.14.1
未来==0.16.0
idna==2.7
isort==4.3.4
惰性对象代理==1.3.1
麦卡贝==0.6.1
单调==1.5
节点语义版本==0.2.0
包装==18.0
补丁==1.16
插件库==0.7
皮格门斯==2.2.0
PyJWT==1.6.4
pylint==2.1.1
pyparsing==2.3.0
pythonnet==2.4.0
PyYAML==3.13
请求==2.20.1
六==1.11.0
tqdm==4.28.1
urllib3==1.24.1
包装==1.10.11

python-3.x python.net
3个回答
2
投票

可能与 clr 字符串样式包存在命名冲突,该包从

Lib\site-packages\clr\style_builder.py
导入并且不包含
AddReference()
方法。

通过 pythonnet 包的正确

clr
模块源代码看起来像 this

在新环境中尝试

pip install pythonnet
,确保没有包冲突,然后重试:

import clr

clr.AddReference()


1
投票

我的脚本文件夹中有一个名为 clr.py 的脚本:( 删除它,现在一切都很好。


0
投票

要了解您当前拥有哪个 clr,可以使用模块 inform

import inspect
print(inspect.getmodule(clr))

如果它返回上述路径,那么它不是好的路径。 就我而言,预期的 clr 返回

 <module 'clr' from 'unknown'>

同时 dir(clr) 显示可用的功能。 期待中的回归

['AddReference',
 'FindAssembly',
 'GetClrType',
 'ListAssemblies',
 '__class__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__package__',
 '__spec__',
 '__version__',
 '_add_pending_namespaces',
 '_available_namespaces',
 '_extras',
 '_load_clr_module',
 'clrmethod',
 'clrproperty',
 'getPreload',
 'loader',
 'setPreload']

就我而言,第一次导入工作正常,但在第二次运行(重新加载模块)后就不行了。 我只在spyder IDE 中观察到这一点,所以我只是转向 VisualStudio 代码,甚至只是通过命令行运行脚本,这很好。

您还可以在spyder中停用用户模块重新加载器(UMR)选项(工具>首选项>Python解释器>取消选中启用UMR),但它可能会产生一些副作用。

© www.soinside.com 2019 - 2024. All rights reserved.