Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6968d01

Browse files
authored
Merge pull request#1955 from filmor/python-3.11
Python 3.11
2 parentsfb17907 +15e2e95 commit6968d01

File tree

11 files changed

+307
-104
lines changed

11 files changed

+307
-104
lines changed

‎.github/workflows/main.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
fail-fast:false
1717
matrix:
1818
os:[windows, ubuntu, macos]
19-
python:["3.7", "3.8", "3.9", "3.10"]
19+
python:["3.7", "3.8", "3.9", "3.10", "3.11"]
2020
platform:[x64, x86]
2121
exclude:
2222
-os:ubuntu
@@ -54,15 +54,17 @@ jobs:
5454
run:|
5555
pip install -v .
5656
57-
-name:Set Python DLL path (non Windows)
57+
-name:Set Python DLL pathand PYTHONHOME(non Windows)
5858
if:${{ matrix.os != 'windows' }}
5959
run:|
6060
echo PYTHONNET_PYDLL=$(python -m find_libpython) >> $GITHUB_ENV
61+
echo PYTHONHOME=$(python -c 'import sys; print(sys.prefix)') >> $GITHUB_ENV
6162
62-
-name:Set Python DLL path (Windows)
63+
-name:Set Python DLL pathand PYTHONHOME(Windows)
6364
if:${{ matrix.os == 'windows' }}
6465
run:|
6566
Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append -InputObject "PYTHONNET_PYDLL=$(python -m find_libpython)"
67+
Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append -InputObject "PYTHONHOME=$(python -c 'import sys; print(sys.prefix)')"
6668
6769
-name:Embedding tests
6870
run:dotnet test --runtime any-${{ matrix.platform }} --logger "console;verbosity=detailed" src/embed_tests/

‎pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ dependencies = [
1313
"clr_loader>=0.2.2,<0.3.0"
1414
]
1515

16-
requires-python =">=3.7, <3.11"
16+
requires-python =">=3.7, <3.12"
1717

1818
classifiers = [
1919
"Development Status :: 5 - Production/Stable",
@@ -25,6 +25,7 @@ classifiers = [
2525
"Programming Language :: Python :: 3.8",
2626
"Programming Language :: Python :: 3.9",
2727
"Programming Language :: Python :: 3.10",
28+
"Programming Language :: Python :: 3.11",
2829
"Operating System :: Microsoft :: Windows",
2930
"Operating System :: POSIX :: Linux",
3031
"Operating System :: MacOS :: MacOS X",

‎src/embed_tests/TestPythonEngineProperties.cs

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class TestPythonEngineProperties
99
[Test]
1010
publicstaticvoidGetBuildinfoDoesntCrash()
1111
{
12+
PythonEngine.Initialize();
1213
using(Py.GIL())
1314
{
1415
strings=PythonEngine.BuildInfo;
@@ -21,6 +22,7 @@ public static void GetBuildinfoDoesntCrash()
2122
[Test]
2223
publicstaticvoidGetCompilerDoesntCrash()
2324
{
25+
PythonEngine.Initialize();
2426
using(Py.GIL())
2527
{
2628
strings=PythonEngine.Compiler;
@@ -34,6 +36,7 @@ public static void GetCompilerDoesntCrash()
3436
[Test]
3537
publicstaticvoidGetCopyrightDoesntCrash()
3638
{
39+
PythonEngine.Initialize();
3740
using(Py.GIL())
3841
{
3942
strings=PythonEngine.Copyright;
@@ -46,6 +49,7 @@ public static void GetCopyrightDoesntCrash()
4649
[Test]
4750
publicstaticvoidGetPlatformDoesntCrash()
4851
{
52+
PythonEngine.Initialize();
4953
using(Py.GIL())
5054
{
5155
strings=PythonEngine.Platform;
@@ -58,6 +62,7 @@ public static void GetPlatformDoesntCrash()
5862
[Test]
5963
publicstaticvoidGetVersionDoesntCrash()
6064
{
65+
PythonEngine.Initialize();
6166
using(Py.GIL())
6267
{
6368
strings=PythonEngine.Version;
@@ -91,9 +96,6 @@ public static void GetProgramNameDefault()
9196
/// Test default behavior of PYTHONHOME. If ENVVAR is set it will
9297
/// return the same value. If not, returns EmptyString.
9398
/// </summary>
94-
/// <remarks>
95-
/// AppVeyor.yml has been update to tests with ENVVAR set.
96-
/// </remarks>
9799
[Test]
98100
publicstaticvoidGetPythonHomeDefault()
99101
{
@@ -109,22 +111,19 @@ public static void GetPythonHomeDefault()
109111
[Test]
110112
publicvoidSetPythonHome()
111113
{
112-
// We needs to ensure that engine was started and shutdown at least once before setting dummy home.
113-
// Otherwise engine will not run with dummy path with random problem.
114-
if(!PythonEngine.IsInitialized)
115-
{
116-
PythonEngine.Initialize();
117-
}
118-
114+
PythonEngine.Initialize();
115+
varpythonHomeBackup=PythonEngine.PythonHome;
119116
PythonEngine.Shutdown();
120117

121-
varpythonHomeBackup=PythonEngine.PythonHome;
118+
if(pythonHomeBackup=="")
119+
Assert.Inconclusive("Can't reset PythonHome to empty string, skipping");
122120

123121
varpythonHome="/dummypath/";
124122

125123
PythonEngine.PythonHome=pythonHome;
126124
PythonEngine.Initialize();
127125

126+
Assert.AreEqual(pythonHome,PythonEngine.PythonHome);
128127
PythonEngine.Shutdown();
129128

130129
// Restoring valid pythonhome.
@@ -134,15 +133,12 @@ public void SetPythonHome()
134133
[Test]
135134
publicvoidSetPythonHomeTwice()
136135
{
137-
// We needs to ensure that engine was started and shutdown at least once before setting dummy home.
138-
// Otherwise engine will not run with dummy path with random problem.
139-
if(!PythonEngine.IsInitialized)
140-
{
141-
PythonEngine.Initialize();
142-
}
136+
PythonEngine.Initialize();
137+
varpythonHomeBackup=PythonEngine.PythonHome;
143138
PythonEngine.Shutdown();
144139

145-
varpythonHomeBackup=PythonEngine.PythonHome;
140+
if(pythonHomeBackup=="")
141+
Assert.Inconclusive("Can't reset PythonHome to empty string, skipping");
146142

147143
varpythonHome="/dummypath/";
148144

@@ -156,6 +152,26 @@ public void SetPythonHomeTwice()
156152
PythonEngine.PythonHome=pythonHomeBackup;
157153
}
158154

155+
[Test]
156+
[Ignore("Currently buggy in Python")]
157+
publicvoidSetPythonHomeEmptyString()
158+
{
159+
PythonEngine.Initialize();
160+
161+
varbackup=PythonEngine.PythonHome;
162+
if(backup=="")
163+
{
164+
PythonEngine.Shutdown();
165+
Assert.Inconclusive("Can't reset PythonHome to empty string, skipping");
166+
}
167+
PythonEngine.PythonHome="";
168+
169+
Assert.AreEqual("",PythonEngine.PythonHome);
170+
171+
PythonEngine.PythonHome=backup;
172+
PythonEngine.Shutdown();
173+
}
174+
159175
[Test]
160176
publicvoidSetProgramName()
161177
{
@@ -202,7 +218,7 @@ public void SetPythonPath()
202218
// The list sys.path is initialized with this value on interpreter startup;
203219
// it can be (and usually is) modified later to change the search path for loading modules.
204220
// See https://docs.python.org/3/c-api/init.html#c.Py_GetPath
205-
// After PythonPath is set, then PythonEngine.PythonPath will correctly return the full search path.
221+
// After PythonPath is set, then PythonEngine.PythonPath will correctly return the full search path.
206222

207223
PythonEngine.Shutdown();
208224

‎src/runtime/Native/TypeOffset311.cs

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
2+
// Auto-generated by geninterop.py.
3+
// DO NOT MODIFY BY HAND.
4+
5+
// Python 3.11: ABI flags: ''
6+
7+
// ReSharper disable InconsistentNaming
8+
// ReSharper disable IdentifierTypo
9+
10+
usingSystem;
11+
usingSystem.Diagnostics.CodeAnalysis;
12+
usingSystem.Runtime.InteropServices;
13+
14+
usingPython.Runtime.Native;
15+
16+
namespacePython.Runtime
17+
{
18+
[SuppressMessage("Style","IDE1006:Naming Styles",
19+
Justification="Following CPython",
20+
Scope="type")]
21+
22+
[StructLayout(LayoutKind.Sequential)]
23+
internalclassTypeOffset311:GeneratedTypeOffsets,ITypeOffsets
24+
{
25+
publicTypeOffset311(){}
26+
// Auto-generated from PyHeapTypeObject in Python.h
27+
publicintob_refcnt{get;privateset;}
28+
publicintob_type{get;privateset;}
29+
publicintob_size{get;privateset;}
30+
publicinttp_name{get;privateset;}
31+
publicinttp_basicsize{get;privateset;}
32+
publicinttp_itemsize{get;privateset;}
33+
publicinttp_dealloc{get;privateset;}
34+
publicinttp_vectorcall_offset{get;privateset;}
35+
publicinttp_getattr{get;privateset;}
36+
publicinttp_setattr{get;privateset;}
37+
publicinttp_as_async{get;privateset;}
38+
publicinttp_repr{get;privateset;}
39+
publicinttp_as_number{get;privateset;}
40+
publicinttp_as_sequence{get;privateset;}
41+
publicinttp_as_mapping{get;privateset;}
42+
publicinttp_hash{get;privateset;}
43+
publicinttp_call{get;privateset;}
44+
publicinttp_str{get;privateset;}
45+
publicinttp_getattro{get;privateset;}
46+
publicinttp_setattro{get;privateset;}
47+
publicinttp_as_buffer{get;privateset;}
48+
publicinttp_flags{get;privateset;}
49+
publicinttp_doc{get;privateset;}
50+
publicinttp_traverse{get;privateset;}
51+
publicinttp_clear{get;privateset;}
52+
publicinttp_richcompare{get;privateset;}
53+
publicinttp_weaklistoffset{get;privateset;}
54+
publicinttp_iter{get;privateset;}
55+
publicinttp_iternext{get;privateset;}
56+
publicinttp_methods{get;privateset;}
57+
publicinttp_members{get;privateset;}
58+
publicinttp_getset{get;privateset;}
59+
publicinttp_base{get;privateset;}
60+
publicinttp_dict{get;privateset;}
61+
publicinttp_descr_get{get;privateset;}
62+
publicinttp_descr_set{get;privateset;}
63+
publicinttp_dictoffset{get;privateset;}
64+
publicinttp_init{get;privateset;}
65+
publicinttp_alloc{get;privateset;}
66+
publicinttp_new{get;privateset;}
67+
publicinttp_free{get;privateset;}
68+
publicinttp_is_gc{get;privateset;}
69+
publicinttp_bases{get;privateset;}
70+
publicinttp_mro{get;privateset;}
71+
publicinttp_cache{get;privateset;}
72+
publicinttp_subclasses{get;privateset;}
73+
publicinttp_weaklist{get;privateset;}
74+
publicinttp_del{get;privateset;}
75+
publicinttp_version_tag{get;privateset;}
76+
publicinttp_finalize{get;privateset;}
77+
publicinttp_vectorcall{get;privateset;}
78+
publicintam_await{get;privateset;}
79+
publicintam_aiter{get;privateset;}
80+
publicintam_anext{get;privateset;}
81+
publicintam_send{get;privateset;}
82+
publicintnb_add{get;privateset;}
83+
publicintnb_subtract{get;privateset;}
84+
publicintnb_multiply{get;privateset;}
85+
publicintnb_remainder{get;privateset;}
86+
publicintnb_divmod{get;privateset;}
87+
publicintnb_power{get;privateset;}
88+
publicintnb_negative{get;privateset;}
89+
publicintnb_positive{get;privateset;}
90+
publicintnb_absolute{get;privateset;}
91+
publicintnb_bool{get;privateset;}
92+
publicintnb_invert{get;privateset;}
93+
publicintnb_lshift{get;privateset;}
94+
publicintnb_rshift{get;privateset;}
95+
publicintnb_and{get;privateset;}
96+
publicintnb_xor{get;privateset;}
97+
publicintnb_or{get;privateset;}
98+
publicintnb_int{get;privateset;}
99+
publicintnb_reserved{get;privateset;}
100+
publicintnb_float{get;privateset;}
101+
publicintnb_inplace_add{get;privateset;}
102+
publicintnb_inplace_subtract{get;privateset;}
103+
publicintnb_inplace_multiply{get;privateset;}
104+
publicintnb_inplace_remainder{get;privateset;}
105+
publicintnb_inplace_power{get;privateset;}
106+
publicintnb_inplace_lshift{get;privateset;}
107+
publicintnb_inplace_rshift{get;privateset;}
108+
publicintnb_inplace_and{get;privateset;}
109+
publicintnb_inplace_xor{get;privateset;}
110+
publicintnb_inplace_or{get;privateset;}
111+
publicintnb_floor_divide{get;privateset;}
112+
publicintnb_true_divide{get;privateset;}
113+
publicintnb_inplace_floor_divide{get;privateset;}
114+
publicintnb_inplace_true_divide{get;privateset;}
115+
publicintnb_index{get;privateset;}
116+
publicintnb_matrix_multiply{get;privateset;}
117+
publicintnb_inplace_matrix_multiply{get;privateset;}
118+
publicintmp_length{get;privateset;}
119+
publicintmp_subscript{get;privateset;}
120+
publicintmp_ass_subscript{get;privateset;}
121+
publicintsq_length{get;privateset;}
122+
publicintsq_concat{get;privateset;}
123+
publicintsq_repeat{get;privateset;}
124+
publicintsq_item{get;privateset;}
125+
publicintwas_sq_slice{get;privateset;}
126+
publicintsq_ass_item{get;privateset;}
127+
publicintwas_sq_ass_slice{get;privateset;}
128+
publicintsq_contains{get;privateset;}
129+
publicintsq_inplace_concat{get;privateset;}
130+
publicintsq_inplace_repeat{get;privateset;}
131+
publicintbf_getbuffer{get;privateset;}
132+
publicintbf_releasebuffer{get;privateset;}
133+
publicintname{get;privateset;}
134+
publicintht_slots{get;privateset;}
135+
publicintqualname{get;privateset;}
136+
publicintht_cached_keys{get;privateset;}
137+
publicintht_module{get;privateset;}
138+
publicint_ht_tpname{get;privateset;}
139+
publicintspec_cache_getitem{get;privateset;}
140+
}
141+
}

‎src/runtime/PythonEngine.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ public static bool IsInitialized
4747
get{returninitialized;}
4848
}
4949

50+
privatestaticvoidEnsureInitialized()
51+
{
52+
if(!IsInitialized)
53+
thrownewInvalidOperationException(
54+
"Python must be initialized for this operation"
55+
);
56+
}
57+
5058
/// <summary>Set to <c>true</c> to enable GIL debugging assistance.</summary>
5159
publicstaticboolDebugGIL{get;set;}=false;
5260

@@ -96,17 +104,16 @@ public static string PythonHome
96104
{
97105
get
98106
{
107+
EnsureInitialized();
99108
IntPtrp=Runtime.TryUsingDll(()=>Runtime.Py_GetPythonHome());
100109
returnUcsMarshaler.PtrToPy3UnicodePy2String(p)??"";
101110
}
102111
set
103112
{
104113
// this value is null in the beginning
105114
Marshal.FreeHGlobal(_pythonHome);
106-
_pythonHome=Runtime.TryUsingDll(
107-
()=>UcsMarshaler.Py3UnicodePy2StringtoPtr(value)
108-
);
109-
Runtime.Py_SetPythonHome(_pythonHome);
115+
_pythonHome=UcsMarshaler.Py3UnicodePy2StringtoPtr(value);
116+
Runtime.TryUsingDll(()=>Runtime.Py_SetPythonHome(_pythonHome));
110117
}
111118
}
112119

@@ -128,7 +135,7 @@ public static string PythonPath
128135
}
129136

130137
publicstaticVersionMinSupportedVersion=>new(3,7);
131-
publicstaticVersionMaxSupportedVersion=>new(3,10,int.MaxValue,int.MaxValue);
138+
publicstaticVersionMaxSupportedVersion=>new(3,11,int.MaxValue,int.MaxValue);
132139
publicstaticboolIsSupportedVersion(Versionversion)=>version>=MinSupportedVersion&&version<=MaxSupportedVersion;
133140

134141
publicstaticstringVersion

‎src/runtime/PythonTypes/PyType.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ private static StolenReference FromSpec(TypeSpec spec, PyTuple? bases = null)
155155
usingvarnativeSpec=newNativeTypeSpec(spec);
156156
varbasesRef=basesisnull?default:bases.Reference;
157157
varresult=Runtime.PyType_FromSpecWithBases(innativeSpec,basesRef);
158+
// Runtime.PyErr_Print();
158159
returnresult.StealOrThrow();
159160
}
160161
}

‎src/runtime/Runtime.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,9 @@ internal static unsafe nint Refcount(BorrowedReference op)
672672
[Pure]
673673
internalstaticint Refcount32(BorrowedReferenceop)=>checked((int)Refcount(op));
674674

675+
internalstaticvoid TryUsingDll(Actionop)=>
676+
TryUsingDll(()=>{op();return0;});
677+
675678
/// <summary>
676679
/// Call specified function, and handle PythonDLL-related failures.
677680
/// </summary>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp