在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
我的脚本文件夹中有一个名为 clr.py 的脚本:( 删除它,现在一切都很好。
要了解您当前拥有哪个 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),但它可能会产生一些副作用。