ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ system c: System ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ | Microsoft Docs
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System; in Visual Studio 2013
Π― ΠΏΡΡΠ°ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Console::SetCursorPosition (int, int) . ΠΠΎΠ³Π΄Π° Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΡΡΡΠΎΠΊΡ using namespace System;
, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΡΠΈΠΌΠ΅ΡΠ΅ C++ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ MSDN, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ "Error: name must be a namespace name"
. Π― ΠΏΡΠΎΠ±ΡΡ ΡΡΠΎ ΡΠΆΠ΅ ΠΏΠ°ΡΡ ΡΠ°ΡΠΎΠ², Π½ΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΠΎ. Π― Π½Π°ΡΠΊΠ½ΡΠ»ΡΡ Π½Π° ΡΠΎΠ½Π½Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Visual Studio 2010 ΠΈ 2012 Π³ΠΎΠ΄ΠΎΠ², Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎ Π΄Π»Ρ 2013 Π³ΠΎΠ΄Π°. ΠΠ»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ Ρ ΠΏΡΠΈΡΠ΅Π»-ΡΡΠΎ lib-ΡΠ°ΠΉΠ»Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ° . Π¨Π°Π³ΠΈ 1-3 Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΡ, Π½ΠΎ Π¨Π°Π³ 4 ΠΌΠ½Π΅ Π½Π΅ ΡΡΠ΅Π½: «Modify the Additional Dependencies property.». ΠΠ»ΡΠ΄Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π΅ΡΡΡ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΠΉΠ» .lib. ΠΠΎ Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ System.lib.
Π’Π°ΠΊΠΎΠΉ ΡΠ°ΡΡΡΡΠΎΠ΅Π½Π½ΡΠΉ, ΡΠ°ΠΊΠΎΠΉ ΡΠ°ΡΡΠ΅ΡΡΠ½Π½ΡΠΉ.
ΠΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π² Visual Studio 2013 Update 4 Π΄Π»Ρ C++?
c++
visual-studio-2013
namespaces
using
ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ
ΠΡΡΠΎΡΠ½ΠΈΠΊ
Evorlor Β Β
28 ΡΠ΅Π²ΡΠ°Π»Ρ 2015 Π² 03:39
3 ΠΎΡΠ²Π΅ΡΠ°
- ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² visual studio (C#)
Π― ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Java ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Visual Studio Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C#. Π Java IDE, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Eclipse, Π΅ΡΠ»ΠΈ Ρ Π½Π΅ Π·Π½Π°Ρ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅, Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΡΡΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠΎΡΠΊΡ (.) ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠ»ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΡΡΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅. ΠΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ visual studio, ΡΡΠΎΠ±Ρ…
- ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Visual Studio ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² using Π²Π½Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
ΠΡΡΡ Π»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Visual Studio (ΠΈΠ»ΠΈ Resharper), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π² ΠΊΠ°ΠΊΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° MVC ΡΠ°Π²Π½ΠΎ using System; using System.Collections.Generic; using System.Linq; using System.Web;…
6
Π§ΡΠΎΠ±Ρ ΡΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΠΌΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, ΠΊΠ»Π°ΡΡ Console
ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System
ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° .NET.
Π ΡΡΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΠΊΠ»Π°Π΄ΠΊΠ° «C++», Π²ΠΊΠ»ΡΡΠ΅Π½Π½Π°Ρ Π² ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ MSDN ΠΌΠ΅ΡΠΎΠ΄Π° Console::SetCursorPosition(int, int) , ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ·ΡΠΊΡ C++/CLI . Π―Π·ΡΠΊ C++/CLI ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ (Ρ ΠΎΡΡ ΠΈ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΏΠΎΡ ΠΎΠΆ) ΠΎΡ ΡΠ·ΡΠΊΠ° C++. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ·ΡΠΊ C++/CLI ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° C++, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Win32.
ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΠΎΡΠΈΠ±ΠΊΠΈ "Error: name must be a namespace name"
, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Win32 C++ Π² ΠΏΡΠΎΠ΅ΠΊΡ CLR. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π²ΡΠ±ΡΠ°Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΡΠ°Π·Π΄Π΅Π»Π΅ «Visual C++» / «CLR»:
ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠΎΠΌ Π΄Π΅ΠΏΠ΅Π½Π΄Π΅Π½ΡΠΈΠΉ ΡΠ°ΠΉΠ»ΠΎΠ² .lib (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²Π°ΡΠΈΡ Lib-ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ° ) ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Win32 Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° CLR Π±ΡΠ΄ΡΡ ΡΡΡΠ»ΠΊΠΈ assembly. ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΠ΅ ΡΡΠΈ ΡΡΡΠ»ΠΊΠΈ assembly Ρ «Add References» Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° «Common Properties , References»:
ΠΠ΄Π½Π°ΠΊΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ, ΡΡΠΎ ΡΡΡΠ»ΠΊΠ° System
assembly ΡΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΠ°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° CLR.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ Π·Π°Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΊΠ°ΠΊ: Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° MSDN Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΡΡΡΠ½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠΉΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Win32, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° «Common Language Runtime Support» ΠΏΠΎΠ΄ Π²ΠΊΠ»Π°Π΄ΠΊΠ°ΠΌΠΈ «General» ΠΈ «C/C++ , ΠΠ±ΡΠΈΠ΅» Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· /clr
, /clr:pure
, /clr:safe
ΠΈΠ»ΠΈ /clr:oldSyntax
(Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠΈΡ
ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ; Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΡΠΎ ΠΈΠ³ΡΠ°Π΅ΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠ°ΡΡ Ρ /clr
) Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ΅Π»Π΅Π²ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° .Net, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π² .vcxproj (ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΡΠΎΠΌ ΠΎΡΠ²Π΅ΡΠ΅ )., ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ assembly, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π½ΠΎΠ²ΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Win32). ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π²ΡΡΠ΅.
ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ
SleuthEye Β Β
06 ΠΌΠ°ΡΡΠ° 2015 Π² 04:07
3
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Common Language Runtime Support (/clr)
Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ-ΠΎΠ±ΡΠΈΠ΅:
Π Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ-C/C++-ΠΠ±ΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ:
ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ
Saullo G. P. Castro Β Β
05 ΠΈΡΠ½Ρ 2017 Π² 12:58
1
Π£ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Win32 Console Application
ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ .NET
. Π ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Win32 Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ 4-5, Π²ΠΊΠ»ΡΡΠ°Ρ std
. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ using namespace std;
Π½Π°Π²Π΅ΡΡ
Ρ.
ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ
0x6773 Β Β
06 ΠΌΠ°ΡΡΠ° 2015 Π² 04:12
- ΠΡΠ»Π°Π΄ΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual Studio
ΠΠ°ΠΊΠΎΠ² Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual Studio? ΠΠ΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ regsvr32 Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΎΡΠΌΠ΅Π½Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° Explorer Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ. ΠΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° ΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ. ΠΡΡΡ Π»ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±…
- ΠΠ°ΠΊ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ std Π² Visual C++ 2013?
Π― Ρ ΠΎΡΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ std:: C++ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΊΠΎΠ΄Π° Π½Π° std:: code , ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ Microsoft ΠΊΠ°ΠΊ xstring . ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΡ ΠΎΠΆ Π½Π° : ΠΠ°ΠΊ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΎΠ±ΡΠΈΠ΅ Π·Π°Π½ΡΡΠΈΡ Π² VS 2008 ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅? ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΎΠΏΡΡΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ STL Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ step-by-step Π²…
ΠΠΎΡ ΠΎΠΆΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ:
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ System & using System.IO
ΠΡΠ°ΠΊ, ΠΌΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ 2 ΡΡΡΠΎΠΊΠΈ Π² Π½Π°ΡΠ°Π»Π΅ using System; using System.IO; ΠΠΎΠΏΡΠΎΡ: Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ Π²ΡΠΎΡΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Sytem.IO ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΠΌΠΎΠΉ ΠΊΠΎΠ΄? ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ…
ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² in visual studio c#
ΠΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² visual studio, Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π½Π° java ΡΠ»ΠΎΠ²ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΎ, ΡΡΠΎ (Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ) Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌΠΏΠΎΡΡ Π² java…
Visual Studio 2013 ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΈ Microsoft.VisualBasic.PowerPack
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² Windows ΡΠΎΡΠΌΠ°Ρ C# ΠΈ VisualΒ StudioΒ 2013 ΠΈΠ· Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° (dreamspark). ΠΠΎΠ³Π΄Π° Ρ ΠΏΡΡΠ°ΡΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΡ: ΠΡΠΈΠ±ΠΊΠ° 2 ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ..
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² visual studio (C#)
Π― ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Java ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠΈΠ½Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Visual Studio Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ C#. Π Java IDE, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Eclipse, Π΅ΡΠ»ΠΈ Ρ Π½Π΅ Π·Π½Π°Ρ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅, Ρ ΠΌΠΎΠ³Ρ ΠΏΡΠΎΡΡΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠΎΡΠΊΡ (.) ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ…
ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Visual Studio ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² using Π²Π½Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
ΠΡΡΡ Π»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Visual Studio (ΠΈΠ»ΠΈ Resharper), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π² ΠΊΠ°ΠΊΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ…
ΠΡΠ»Π°Π΄ΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual Studio
ΠΠ°ΠΊΠΎΠ² Π½Π°ΠΈΠ»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Visual Studio? ΠΠ΅ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ regsvr32 Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΎΡΠΌΠ΅Π½Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° Explorer Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ…
ΠΠ°ΠΊ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ std Π² Visual C++ 2013?
Π― Ρ ΠΎΡΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ std:: C++ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΊΠΎΠ΄Π° Π½Π° std:: code , ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ Microsoft ΠΊΠ°ΠΊ xstring . ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎΡ ΠΎΠΆ Π½Π° : ΠΠ°ΠΊ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΎΠ±ΡΠΈΠ΅…
ΠΠ΄Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² visual studio
Π― Π½ΠΎΠ²ΠΈΡΠΎΠΊ Π² Visual Studio ΠΈ C#., Ρ ΠΏΡΠΎΡΠ΅Π» ΡΠ΅ΡΠ΅Π· ΡΡΠ΅Π±Π½ΡΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΡ ΠΏΠΎ C#, ΠΈ Π²ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΡΠΎΡΠ΅Π», Π±ΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½. ΠΠΎ ΠΊΠΎΠ³Π΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠ°Π±Π»ΠΎΠ½ Π½Π° Visual…
ΠΠ°ΠΊ Π±ΡΡΡΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² Visual Studio 2015
ΠΠΎΠ³Π΄Π° Ρ Π½Π°Π±ΠΈΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π½Π΅ Π±ΡΠ»ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΊΡΠ°ΡΠ½ΠΎΠ΅ Π²ΠΎΠ»Π½ΠΈΡΡΠΎΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅ (ΠΎΠ½ ΠΆΠ΅ Π²ΠΎΠ»Π½ΠΈΡΡΠ°Ρ ΠΊΡΠ°ΡΠ½Π°Ρ Π»ΠΈΠ½ΠΈΡ), ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Visual Studio…
Π’ΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ‘Timers’ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «system»
Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡ using System.Timers Π² visual studio 2013 using System.Timers; ΠΡΠΈΠ±ΠΊΠ°: Π’ΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ‘Timers’ Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ‘System’…
ΠΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ.Net core 2.2 ΠΏΡΠΎΠ΅ΠΊΡ? Π’ΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ‘System’ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ
Π‘Π΅ΠΉΡΠ°Ρ Ρ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π½ΠΎΠ²Π΅ΠΉΡΠ΅Π΅ ΡΠ΄ΡΠΎ ββ. Net.
PS C:\temp> dotnet --version
2.2.301
Π Ρ ΡΠΎΠ·Π΄Π°Π» Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ.
PS C:\temp> dotnet new console
ΠΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ Π².NET Core!
Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ.NET Core: https://aka.ms/dotnet-docs ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ «dotnet —help» Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ: https://aka.ms/dotnet-cli-docs
ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΡ
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.NET Core ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π½Π°ΠΌ ΡΠ»ΡΡΡΠΈΡΡ Π²Π°Ρ ΠΎΠΏΡΡ. ΠΠ°Π½Π½ΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠΌΠΈ ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠ°Π½Π½ΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Microsoft ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΠΈ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ DOTNET_CLI_TELEMETRY_OPTOUT Π² «1» ΠΈΠ»ΠΈ «true», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²Π°ΡΡ Π»ΡΠ±ΠΈΠΌΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ.
Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ.NET Core CLI Tools ΡΠ΅Π»Π΅ΠΌΠ΅ΡΡΠΈΠΈ: https://aka.ms/dotnet-cli-telemetry
ASP.NET Core
Π£ΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ASP.NET Core HTTPS. Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ²Π΅ΡΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ‘dotnet dev-certs https —trust’ (ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Windows ΠΈ macOS). ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠ²Π΅ΡΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ HTTPS ΡΠΌ. https://go.microsoft.com/fwlink/?linkid=848054. ΠΠΎΡΠΎΠ²ΠΈΠΌΡΡ… Π¨Π°Π±Π»ΠΎΠ½ «ΠΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅» ΡΠΎΠ·Π΄Π°Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ… ΠΠ°ΠΏΡΡΠΊ ‘dotnet restore’ Π½Π° C:\temp\temp.csproj… ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ Π·Π° 190,58 ΠΌΡ Π΄Π»Ρ C: \ temp \ temp.csproj.
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½ΠΈΠ΅, dotnet run
ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ?
PS C: \ temp> dotnet run C: \ Users \ wangyi \ AppData \ Local \ Temp \ 1 \.NETCoreApp, Version = v2.2.AssemblyAttributes.cs (4,20): ΠΎΡΠΈΠ±ΠΊΠ° CS0400: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ "Π‘ΠΈΡΡΠ΅ΠΌΠ°" Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ (Π²Π°ΠΌ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(10,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp. csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(11,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(12,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(13,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(14,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(15,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2. 2\temp.AssemblyInfo.cs(16,12): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] C:\Users\wangyi\AppData\Local\Temp\1\.NETCoreApp,Version=v2.2.AssemblyAttributes.cs(4,71): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C: \ Temp\temp.csproj] C:\Users\wangyi\AppData\Local\Temp\1\.NETCoreApp,Version=v2.2.AssemblyAttributes.cs(4,99): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ FrameworkDisplayName (Π΅ΡΡΡ Π²Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C:\temp\temp.csproj] C:\Users\wangyi\AppData\Local\Temp\1\.NETCoreApp,Version=v2.2.AssemblyAttributes.cs(4,122): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(10,55): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] obj\Debug\netcoreapp2. 2\temp.AssemblyInfo.cs(11,61): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(12,59): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(13,68): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(14,55): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(15,53): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(16,55): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] Program.cs(1,7): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C:\temp\temp. csproj] C:\Users\wangyi\AppData\Local\Temp\1\.NETCoreApp,Version=v2.2.AssemblyAttributes.cs(2,7): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ "Π‘ΠΈΡΡΠ΅ΠΌΠ°" (Π΅ΡΡΡ Π²Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C:\temp\temp.csproj] C:\Users\wangyi\AppData\Local\Temp\1\.NETCoreApp,Version=v2.2.AssemblyAttributes.cs(3,7): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (Π΅ΡΡΡ Π²Ρ ΠΏΡΠΎΠΏΡΡΡΠΈΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C:\temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(7,7): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] obj\Debug\netcoreapp2.2\temp.AssemblyInfo.cs(8,7): ΠΎΡΠΈΠ±ΠΊΠ° CS0246: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ ΠΈΠ»ΠΈ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ 'System' (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?) [C: \ Temp\temp.csproj] Program.cs(5,11): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.Object' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp. csproj] Program.cs(7,26): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.String' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C:\temp\temp.csproj] Program.cs(7,16): ΠΎΡΠΈΠ±ΠΊΠ° CS0518: ΠΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ 'System.Void' Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ [C: \ temp \ temp.csproj] Π‘Π±ΠΎΡΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»Π°ΡΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΈΡΠΏΡΠ°Π²ΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ½ΠΎΠ²Π°.
ΠΠ΅Π³ dotnet restore
Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ» Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ.
PS C:\temp> dotnet restore
Restore completed in 41.15 ms for C:\temp\temp.csproj.
Π― ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ «ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»Ρ C: \ Program Files \ dotnet \ sdk \ NuGetFallbackFolder» ( https://github.com/dotnet/core/issues/1006), Π½ΠΎ ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΡΠ΅ΡΠΈΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΠ΄Π½Π°ΠΊΠΎ Π² Visual Studio ΠΏΡΠΎΠ΅ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°.net core Π½Π° 2.1.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΈΠΌΠ΅Π½Π° (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ — ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ Ρ. ΠΏ. ΠΡΠΈ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ», ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π§ΡΠΎΠ±Ρ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ «ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½». ΠΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠΉ ΠΈΠΌΠ΅Π½Π° Π²Π½ΡΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π»Ρ Π΄Π²ΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ. ΠΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΠ° ΠΎ ΡΠΎΠΌ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠΈΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ Π²ΠΈΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ, ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ ΡΠ΅ΡΡΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
ΠΡΠΈΠΌΠ΅Ρ : struct student Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠΌΡ ΡΠ΅Π³Π° ΡΡΡΡΠΊΡΡΡΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΠ°ΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ student. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ·ΡΠΊΠ° Π‘ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ ΠΏΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ student ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° struct, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π³ ΡΡΡΡΠΊΡΡΡΡ. ΠΠΎΠ³Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ student ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠ±ΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (-> ΠΈΠ»ΠΈ . ), ΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΡΡΡΠΊΡΡΡΡ. Π Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ student Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. |
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «ComponentModel» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System»
ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ!
ΠΡΠΎΡΡ ΠΏΡΠΎΡΠ΅Π½ΠΈΡ,Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠ°Ρ ΡΠ΅ΠΌΠ° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ,Π½ΠΎ ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° Π½Π° ΡΠ²ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π½Π°ΡΡΠ».
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π½ΡΠ± Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° Π‘# (ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° Π‘/Π‘++).ΠΠ°Π΄Π°Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΊΡ,Ρ,ΠΊΠ°ΠΊ Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΡΡΡΠ΄Π΅Π½Ρ,ΡΠ΅ΡΠΈΠ» «ΠΏΠΎΠ·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°ΡΡ» Ρ Π΄ΡΡΠ³ΠΈΡ
.ΠΠ°ΡΡΠ» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΊΡ Π½Π° Π‘#. Π Π΅ΡΠΈΠ» ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡ,ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΊΠ°ΡΠ°Π» Microsoft Visual Studio 10.0 (ΡΠΎΡ ΡΡΠΎ ΡΠΊΡΠΏΡΠ΅ΡΡ) ,Π΄ΠΎΠ±Π°Π²ΠΈΠ» 2 ΡΠ°ΠΉΠ»Π°(ΠΌΠΎΡ ΠΏΡΠΎΠ³Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 2-ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² .cs (ΠΎΠ΄ΠΈΠ½ main.cs ΠΈ Form1.cs ))Π½Π°ΠΆΠ°Π» F5 ΠΈ ΠΏΠΎΠ»Π΅ΡΠ΅Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ…
ΠΡΠΈΠ±ΠΊΠ° 1 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «ComponentModel» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 2 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «ComponentModel» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 3 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Data» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 4 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Data» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 5 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Drawing» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 6 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Drawing» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 7 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Windows» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 8 ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Windows» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 9 ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΠΈΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «Form» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
ΠΡΠΈΠ±ΠΊΠ° 10 ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΠΈΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «DialogHelp» (ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Π° using ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΡ?)
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ΠΠ°ΡΠ°Π½Π΅Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ.
ΠΠΎΠ΄ ΠΊ Π·Π°Π΄Π°ΡΠ΅: Β«ΠΠΌΡ ΡΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ «ComponentModel» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ «System»Β»
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΠ΅ ΠΠ°ΠΉΠ΄Π΅Ρ ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΠΌΠ΅Π½ ‘System.Windows.Interop’
Π‘ΠΏΡΠ°Π²ΠΊΠ° !! ** ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ** «System.Windows.Interop» ****
Π½Π΅Π΄Π°Π²Π½ΠΎ Ρ ΠΏΠΎΡΡΡΠΎΠΈΠ» ΠΏΡΠΎΠ΅ΠΊΡ winform ΠΈ Ρ ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ dll (Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° d3d), ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄ΡΡΠ³ΠΈΠΌ c++ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ;
OS: win7 x64
IDE: vs2013
Language:C#
current framework used in the winform project is ".net framework 4.5"
Π Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ winform Ρ ΡΠΎΠ·Π΄Π°Π» ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ MCDllOpt.cs. ΠΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Interop; // Error occured here!
namespace WorldEditor
{
class MCDllOpt
{
}
}
Π Π²ΠΎΡ ΡΠ°ΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ.
1>CoreCompile:
1> C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /define:TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Deployment.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\. NETFramework\v4.5.1\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Drawing.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Windows.Forms.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\WorldEditor.exe /subsystemversion:6.00 /resource:obj\Release\WorldEditor.Form1.resources /resource:obj\Release\WorldEditor.Properties.Resources.resources /target:winexe /utf8output Form1.cs Form1.Designer.cs MCDllOpt.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs "C:\Users\Think\AppData\Local\Temp\.NETFramework,Version=v4.5.1.AssemblyAttributes.cs" obj\Release\\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3. cs obj\Release\\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs obj\Release\\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
1>F:\WorldEditor\WorldEditor\WorldEditor\MCDllOpt.cs(6,22,6,29): error CS0234: The type or namespace name 'Interop' does not exist in the namespace 'System.Windows' (are you missing an assembly reference?)
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.78
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
ΠΠΎΡΠ»Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠΈΠ½ΡΡ ΠΏΠΎΠΈΡΠΊΠ°. Π― ΡΠ·Π½Π°Π», ΡΡΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ. ΠΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ Π΄ΠΎΠ±Π°Π²Π»Ρ Π²ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ, ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΊΠΎΡΠΎΡΡΡ «System.Windows», ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π°!
Π£ ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°Π½ΡΡΠ΅? ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠΌΠΎΠ³ΠΈΡΠ΅ ΠΌΠ½Π΅.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ won’ t Π½Π°Ρ ΠΎΠ΄ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ‘ Π‘ΠΈΡΡΠ΅ΠΌΠ°. Windows. Interop’
ΠΠΎΠΌΠΎΡΡ!! ** ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ** ‘Π‘ΠΈΡΡΠ΅ΠΌΠ°. Windows. Interop’ ****
Π½Π΅Π΄Π°Π²Π½ΠΎ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π» ΠΏΡΠΎΠ΅ΠΊΡ winform, ΠΈ Ρ ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ dll (ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ d3d), ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΡΠΉ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ C++;
OS: win7 x64
IDE: vs2013
Language:C#
current framework used in the winform project is ".net framework 4.5"
Π Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ winform, Ρ ΡΠΎΠ·Π΄Π°Π» ΡΠ°ΠΉΠ» ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ MCDllOpt.cs
ΠΠΎΠ΄Π΅ΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Interop;//Error occured here!
namespace WorldEditor
{
class MCDllOpt
{
}
}
Π Π²ΠΎΡ ΡΠ°ΡΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ.
1>CoreCompile:
1> C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe /noconfig /nowarn:1701,1702,2008 /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /define:TRACE /errorendlocation /preferreduilang:en-US /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\. NETFramework\v4.5.1\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Deployment.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Drawing.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Windows.Forms.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\. NETFramework\v4.5.1\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\WorldEditor.exe /subsystemversion:6.00 /resource:obj\Release\WorldEditor.Form1.resources /resource:obj\Release\WorldEditor.Properties.Resources.resources /target:winexe /utf8output Form1.cs Form1.Designer.cs MCDllOpt.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs "C:\Users\Think\AppData\Local\Temp\.NETFramework,Version=v4.5.1.AssemblyAttributes.cs" obj\Release\\TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs obj\Release\\TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs obj\Release\\TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
1>F:\WorldEditor\WorldEditor\WorldEditor\MCDllOpt.cs(6,22,6,29): error CS0234: The type or namespace name 'Interop' does not exist in the namespace 'System. Windows' (are you missing an assembly reference?)
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.78
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
After several minutes’ searching.I found out that I need to add references specified.
But after I add all the references whose prefix is ‘System.Windows’,the problem’s still not fixed!
Π£ ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΅ΡΡΡ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠ΅ΠΆΠ΄Π΅?Please help me.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ | ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ΠΈ C++
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ ΠΈΠΌΠ΅Π½. ΠΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΒΠ²Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ
ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
namespace ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΒΠ±Π»Π΅ΠΌΡ. ΠΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, namespace ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ±ΡΠ°Ρ ΡΠΎΡΠΌΠ° namespace ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½ΠΈΠΆΠ΅:
namespace ΠΈΠΌΡ {
// ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
}
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π·ΡΠΌΡΠ½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:
namespace {
// ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
}
ΠΠ΅Π·ΡΠΌΡΠ½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Ρ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ namespace:
namespace MyNameSpace {
int i, k;
void myfunc(int j) { cout << j; }
}
ΠΠ΄Π΅ΡΡ i, k ΠΈ myfunc() ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ MyNameSpace.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠΎ Π΄Π»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΎΠΏΡΠ΅ΒΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ°ΠΏΡΠΈΒΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 10 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΒΡΠΈΡ:
MyNameSpace::i =10;
ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΡΡΠΎ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ using Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ using ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠΎΡΠΌΡ Π·Π°ΠΏΠΈΡΠΈ:
using namespace ΠΈΠΌΡ;
using ΠΈΠΌΡ::ΡΠ»Π΅Π½;
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΈΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΈΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ. ΠΡΠ΅ ΡΠ»Π΅Π½Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΒΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠΎ Π²ΡΠΎΡΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠ»Π΅Π½Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ MyNameSpace ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ using ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ:
using MyNameSpace::k; // Π²ΠΈΠ΄ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ k
k = 10; // Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ k Π²ΠΈΠ΄ΠΈΠΌ
using namespace MyNameSpace; // Π²ΡΠ΅ ΡΠ»Π΅Π½Ρ MyNameSpace Π²ΠΈΠ΄ΠΈΠΌΡ
i = 10; // Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΡΠ»Π΅Π½Ρ MyNameSpace Π²ΠΈΠ΄ΠΈΠΌΡ
c ++ — Β«Π‘ΠΈΡΡΠ΅ΠΌΠ°Β» Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ .Net Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π½Π° C ++. ΠΡΡΡΠ΄Π° Ρ ΠΏΠΎΠ½ΡΠ», ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. Π ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅:
#include
using ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System;
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ System :: Data;
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System :: Data :: Sql;
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Microsoft :: Sqlserver :: Server;
Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ System :: Data :: SqlTypes;
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ std;
int main ()
{
cout << "Hello World!" << endl;
Π²ΠΎΠ·Π²ΡΠ°Ρ 0;
}
ΠΡΠ»ΠΈ Ρ Π·Π°ΠΏΡΡΡΠΈΠ» Π΅Π³ΠΎ, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ:
0:08:06: ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π³ΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Test. ..
10:08:06: ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ, ΡΠ°Π³ qmake ΠΏΡΠΎΠΏΡΡΠ΅Π½.
10:08:06: ΠΠ°ΠΏΡΡΠΊ: "/ usr / bin / make"
g ++ -c -m64 -pipe -g -Wall -W -DQT_WEBKIT -I / usr / share / qt4 / mkspecs / linux-g ++ - 64 -I ../ Test -I ../ Test -I. -o main.o ../Test/main.cpp
../Test/main.cpp:2:17: error: "Π‘ΠΈΡΡΠ΅ΠΌΠ°" Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½
../Test/main.cpp:2:23: error: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ';' ΠΆΠ΅ΡΠΎΠ½
../Test/main.cpp:3:17: error: Β«Π‘ΠΈΡΡΠ΅ΠΌΠ°Β» Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°
../Test/main.cpp:3:25: error: Β«ΠΠ°Π½Π½ΡΠ΅Β» Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
../Test/main.cpp:3:29: error: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ';' ΠΆΠ΅ΡΠΎΠ½
../Test/main.cpp:4:17: error: 'Π‘ΠΈΡΡΠ΅ΠΌΠ°' Π½Π΅ Π±ΡΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°
../Test/main.cpp:4:31: ΠΎΡΠΈΠ±ΠΊΠ°: 'Sql' Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½
../Test/main.cpp:4:34: error: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ';' ΠΆΠ΅ΡΠΎΠ½
../Test/main.cpp:5:17: ΠΎΡΠΈΠ±ΠΊΠ°: Β«MicrosoftΒ» Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΎ
../Test/main.cpp:5:39: ΠΎΡΠΈΠ±ΠΊΠ°: Β«Π‘Π΅ΡΠ²Π΅ΡΒ» Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½
../Test/main.cpp:5:45: error: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ';' ΠΆΠ΅ΡΠΎΠ½
. ./Test/main.cpp:6:17: error: 'Π‘ΠΈΡΡΠ΅ΠΌΠ°' Π½Π΅ Π±ΡΠ»Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π°
../Test/main.cpp:6:31: ΠΎΡΠΈΠ±ΠΊΠ°: 'SqlTypes' Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
../Test/main.cpp:6:39: error: ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΈΠΌΡ-ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ';' ΠΆΠ΅ΡΠΎΠ½
make: *** [main.o] ΠΡΠΈΠ±ΠΊΠ° 1
10:08:06: ΠΡΠΎΡΠ΅ΡΡ "/ usr / bin / make" Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ 2.
ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ / ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Test (ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ: ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠΎΠ»)
ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ°Π³Π° Make
10:08:06: ΠΡΠΎΡΠ΅Π΄ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ: 00:00.
ΡΡΠΎ ΠΌΠ½Π΅ Π΄Π΅Π»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ΠΡΡΠ°ΡΠΈ, Ρ ΡΠΈΡΠ°Π» ΡΡΠΎΡ ΠΈ ΡΡΠΎΡ ΠΏΠΎΡΡΡ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΌΠ½Π΅ Π΄Π΅Π»Π°ΡΡ Ρ / clr Π² ΠΌΠΎΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ cpp?
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ (7) - ΡΡΡΠ°Π½ΠΈΡΠ° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Linux
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ (7) - ΡΡΡΠ°Π½ΠΈΡΠ° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Linux
NAMESPACES (7) Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Linux NAMESPACES (7)
ΠΠΠΠΠΠΠΠ ΡΠ²Π΅ΡΡ Ρ
namespaces - ΠΎΠ±Π·ΠΎΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Linux
ΠΠΠΠ‘ΠΠΠΠ Π²Π²Π΅ΡΡ Ρ
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΎΠ±Π΅ΡΡΡΠ²Π°Π΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠ΅ΡΡΡΡ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ΅ΡΡΡΡΡ Π²ΠΈΠ΄Π½Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π½Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, Π½ΠΎ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ - ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ². ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ / proc ΠΈ ΡΠ΅Π·ΡΠΌΠΈΡΡΠ΅Ρ API Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌΠΈ ΠΈΠΌΠ΅Π½. Π’ΠΈΠΏΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΡΠΈΠΏΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π² Linux.ΠΡΠΎΡΠΎΠΉ ΡΡΠΎΠ»Π±Π΅Ρ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π°. Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ API. Π’ΡΠ΅ΡΠΈΠΉ ΡΡΠΎΠ»Π±Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΡΠΈΠΏ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠΎΠ»Π±Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ²ΠΎΠ΄ΠΊΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΠΈΠΏΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. Π‘ΡΡΠ°Π½ΠΈΡΠ° ΡΠ»Π°Π³Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈΠ·ΠΎΠ»ΠΈΡΡΠ΅Ρ Cgroup CLONE_NEWCGROUP cgroup_namespaces (7) ΠΠΎΡΠ΅Π½Ρ Cgroup ΠΊΠ°ΡΠ°Π»ΠΎΠ³ IPC CLONE_NEWIPC ipc_namespaces (7) System V IPC, POSIX ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π‘Π΅ΡΡ CLONE_NEWNET network_namespaces (7) Π‘Π΅ΡΠ΅Π²ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΡΡΠ΅ΠΊΠΈ, ΠΏΠΎΡΡΡ ΠΈ Ρ. Π΄.Mount CLONE_NEWNS mount_namespaces (7) Π’ΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ PID CLONE_NEWPID pid_namespaces (7) ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΡΠ΅ΠΌΡ CLONE_NEWTIME time_namespaces (7) ΠΠ°Π³ΡΡΠ·ΠΎΡΠ½Π°Ρ ΠΈ ΠΌΠΎΠ½ΠΎΡΠΎΠ½Π½Π°Ρ ΡΠ°ΡΡ ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ CLONE_NEWUSER user_namespaces (7) T {ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π³ΡΡΠΏΠΏΡ T} UTS CLONE_NEWUTS uts_namespaces (7) ΠΠΌΡ Ρ ΠΎΡΡΠ° ΠΈ NIS Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ API ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² / proc , ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ API Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ: ΠΊΠ»ΠΎΠ½ (2) Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² clone (2) ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.ΠΡΠ»ΠΈ flags Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ· CLONE_NEW * ΡΠ»Π°Π³ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π½ΠΈΠΆΠ΅, Π·Π°ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π°Π³Π°, Π° Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠ»Π΅Π½ ΡΡΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½. (ΠΡΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌΠΈ ΠΈΠΌΠ΅Π½.) ΡΠ΅ΡΠ½Ρ (2) Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² setns (2) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΠ΅Π½.ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ: ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· / proc / [pid] / ns ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅. Π½Π΅ Π΄Π΅Π»ΠΈΡΡΡΡ (2) Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² unshare (2) ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π² Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. ΠΡΠ»ΠΈ ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ»Π°Π³ΠΎΠ² CLONE_NEW * Π½ΠΈΠΆΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π°Π³Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ»Π΅Π½ΠΎΠΌ ΡΡΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½.(ΠΡΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠ΄ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌ ΠΈΠΌΠ΅Π½.) ioctl (2) Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ioctl (2) ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½. ΠΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½ Π² ioctl_ns (2). Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ clone (2) ΠΈ unshare (2) Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ CAP_SYS_ADMIN , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΈΠ΄Π½Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ ΠΊ Π½Π΅ΠΌΡ.ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½ ΡΠ²Π»ΡΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ: Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3.8, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ°ΡΠ°Π»ΠΎΠ³ / proc / [pid] / ns / Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ / proc / [pid] / ns / , ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ setns (2): $ ls -l / proc / $$ / ns | awk '{print $ 1, 9, 10, 11 Π΄ΠΎΠ»Π»Π°ΡΠΎΠ²}' Π²ΡΠ΅Π³ΠΎ 0 lrwxrwxrwx. cgroup -> cgroup: [4026531835] lrwxrwxrwx.ipc -> ipc: [4026531839] lrwxrwxrwx. mnt -> mnt: [4026531840] lrwxrwxrwx. ΡΠ΅ΡΡ -> ΡΠ΅ΡΡ: [4026531969] lrwxrwxrwx. pid -> pid: [4026531836] lrwxrwxrwx. pid_for_children -> pid: [4026531834] lrwxrwxrwx. Π²ΡΠ΅ΠΌΡ -> Π²ΡΠ΅ΠΌΡ: [4026531834] lrwxrwxrwx. time_for_children -> Π²ΡΠ΅ΠΌΡ: [4026531834] lrwxrwxrwx. ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ -> ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ: [4026531837] lrwxrwxrwx. uts -> uts: [4026531838] ΠΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠΌ. Mount (2)) ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΡΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π² Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Ρ ΡΠ°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² pid , ΠΆΠΈΠ²ΠΎΠ΅, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ.ΠΡΠΊΡΡΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΡΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ (ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π°, bind, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² pid . ΠΠΎΠΊΠ° ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ, ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΆΠΈΠ²Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ. Π Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π² setns (2). Π Linux 3.7 ΠΈ ΡΠ°Π½Π΅Π΅ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ Π±ΡΠ»ΠΈ Π²ΠΈΠ΄Π½Ρ ΠΊΠ°ΠΊ ΠΆΠ΅ΡΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Linux 3.8 ΠΎΠ½ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ. ΠΡΠ»ΠΈ Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΈ Π½ΠΎΠΌΠ΅ΡΠ° inode ΠΈΠ· ΠΈΡ / proc / [pid] / ns / xxx ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΡΡΠ»ΠΎΠΊ Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅; Π°Π½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ stat.st_dev ΠΈ stat.st_ino ΠΏΠΎΠ»Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ stat (2). Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ ΡΡΡΠΎΠΊΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΡΠΈΠΏ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈ Π½ΠΎΠΌΠ΅Ρ inode, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: $ readlink / proc / $$ / ns / uts uts: [4026531838] Π‘ΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ Π² ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅: / proc / [pid] / ns / cgroup (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 4.6) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ cgroup ΠΏΡΠΎΡΠ΅ΡΡ. / proc / [pid] / ns / ipc (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3. 0) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ IPC ΠΏΡΠΎΡΠ΅ΡΡ. / proc / [pid] / ns / mnt (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3.8) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ. / proc / [pid] / ns / net (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3.0) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡ. / proc / [pid] / ns / pid (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3.8) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ PID ΠΏΡΠΎΡΠ΅ΡΡ. ΠΡΠ° ΡΡΡΠΊΠ° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠΊΠ° ΡΠ»ΡΠΆΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡ (Ρ.Π΅. ΡΠ»Π΅Π½ΡΡΠ²ΠΎ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ PID ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ). / proc / [pid] / ns / pid_for_children (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 4.12) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ PID Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² unshare (2) ΠΈ setns (2) (ΡΠΌ. pid_namespaces (7)), ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ / proc / [pid] / ns / pid .Π‘ΠΈΠΌΠ²ΠΎΠ»ΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½. (ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ readlink (2) ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ Π²Π΅ΡΠ½Π΅Ρ ΠΏΡΡΡΠΎΠΉ Π±ΡΡΠ΅Ρ.) / proc / [pid] / ns / time (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 5.6) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ. / proc / [pid] / ns / time_for_children (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 5.6) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠ² unshare (2) ΠΈ setns (2) (ΡΠΌ. time_namespaces (7)), ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ / proc / [pid] / Π½Ρ / Π²ΡΠ΅ΠΌΡ . / proc / [pid] / ns / user (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3.8) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡ. / proc / [pid] / ns / uts (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 3.0) ΠΡΠΎΡ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ UTS ΠΏΡΠΎΡΠ΅ΡΡ. Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ (ΡΡΡΠ»ΠΊΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ (2)) ΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΠ»ΠΊΠΈ ΡΠ΅Π³ΡΠ»ΠΈΡΡΡΡΡΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ° ptrace PTRACE_MODE_READ_FSCREDS ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°; ΡΠΌ. ptrace (2). ΠΠ°ΡΠ°Π»ΠΎΠ³ / proc / sys / user Π€Π°ΠΉΠ»Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ / proc / sys / user (ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Ρ Linux 4.9) Π²ΡΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ. ΠΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ: max_cgroup_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ cgroup, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. max_ipc_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ipc, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. max_mnt_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. max_net_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. max_pid_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ PID, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. max_time_namespaces (Π½Π°ΡΠΈΠ½Π°Ρ Ρ Linux 5.7) ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. max_user_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. max_uts_namespaces ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ uts, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ : * ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ. * ΠΠ½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΡΡΠΈΡ ΡΠ°ΠΉΠ»Π°Ρ , ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΠΊΡΡΡΠΈΡ. * ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π΅Π»Π°. * ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π½Π° Π²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ UID 0. * ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π»ΡΠ±ΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΠ΅Π½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ PID ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ. * ΠΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ clone (2) ΠΈ unshare (2) ΡΠ΅ΡΠΏΡΡ Π½Π΅ΡΠ΄Π°ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ENOSPC . * ΠΠ»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ ( / proc / sys / kernel / threads-max ). Π ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΠΠΠ‘ΠΠΠ’ . * ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠΈΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΏΡΠ΅Π΄ΠΊΠΎΠ².Π’ΠΎΡΠ½Π΅Π΅: + Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΅ΡΡΡ UID ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ. + ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ, ΠΎΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ UID ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½-ΠΏΡΠ΅Π΄ΠΊΠΎΠ², ΠΈ ΡΠ΄ΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠ΅Π΄Π΅Π» ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄Π»Ρ UID ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΏΡΠ΅Π΄ΠΊΠ° Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΎ. + ΠΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ ΠΏΡΠ½ΠΊΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π²ΡΡ ΠΎΠ΄Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ Π² ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ. ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΡΡ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΡ. ΠΡΠΈ ΡΠ°ΠΊΡΠΎΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅: * ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» / proc / [pid] / ns / * .* ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, PID ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½), ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. * ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ. ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. * ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ PID, ΠΈ Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ / proc / [pid] / ns / pid_for_children ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ°ΠΉΡ. * ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΈ Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠΉ / proc / [pid] / ns / time_for_children ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠ°ΠΉΡ.* ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ IPC ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ mqueue ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° (ΡΠΌ. mq_overview (7)) ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΠ΅Π½. * ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ PID ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ proc (5) ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΠΈΠΌΠ΅Π½.
ΠΠ ΠΠΠΠ Π« Π½Π°Π²Π΅ΡΡ Ρ
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ clone (2) ΠΈ user_namespaces (7).
Π‘ΠΠΠ’Π ΠΠ’Π Π’ΠΠΠΠ top
nsenter (1), ΡΡΡΠ»ΠΊΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ (1), unshare (1), clone (2), ioctl_ns (2), setns (2), unshare (2), proc (5), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ (7), cgroup_namespaces (7), cgroups (7), ΡΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (7), ipc_namespaces (7), network_namespaces (7), pid_namespaces (7), user_namespaces (7), uts_namespaces (7), lsns (8), pam_namespace (8), switch_root (8)
COLOPHON Π²Π΅ΡΡ
ΠΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π²Π΅ΡΡΠΈΠΈ 5. 11 ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΈΡ Linux . ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://www.kernel.org/doc/man-pages/.
Π‘ΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅:
nsenter (1),
procps (1),
ΠΏΡ (1),
systemd-ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅-Π²ΠΈΡΡ (1),
Π½Π΅ Π΄Π΅Π»ΠΈΡΡΡΡ (1),
ΠΊΠ»ΠΎΠ½ (2),
getdomainname (2),
gethostname (2),
ioctl_ns (2),
ΡΠ΅ΡΠ½Ρ (2),
Π½Π΅ Π΄Π΅Π»ΠΈΡΡ (2),
proc (5),
systemd.exec (5),
cgroup_namespaces (7),
cgroups (7),
ΡΡΠ΅ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ (7),
ipc_namespaces (7),
mount_namespaces (7),
mq_overview (7),
network_namespaces (7),
pid_namespaces (7),
time_namespaces (7),
user_namespaces (7),
uts_namespaces (7),
lsns (8),
rdma-ΡΠΈΡΡΠ΅ΠΌΠ° (8)
ΠΠ²ΡΠΎΡΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²Π° ΠΈ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ Π½Π° ΡΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΡΡΡΠ°Π½ΠΈΡΠ°
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π²ΡΡΡΠ½ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½: ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ mount
ΠΡΠ° ΡΡΠ°ΡΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ mount ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΡΡΠ΅ΠΉ Π² ΡΠ΅ΡΠΈΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Linux. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» ΡΠ΅ΠΌΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½, Π·Π°Π»ΠΎΠΆΠΈΠ² ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π½Π°ΡΠ°ΡΠΎΠΉ ββΠ² ΡΡΠ°ΡΡΠ΅ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½. ΠΠΎΡ ΡΠ΅Π»Ρ - ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Linux. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ, ΠΊΠ°ΠΊ Linux ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΡΠ΅ΡΠΈΠ΅ΠΉ ΡΡΠ°ΡΠ΅ΠΉ ΠΎ CGroup, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΠΈΡΠ°Π» ΡΠ°Π½Π΅Π΅. ΠΠ°Π΄Π΅ΡΡΡ, ΠΊ ΡΠΎΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌΠΈ ΠΈΠΌΠ΅Π½, Ρ ΡΠΌΠΎΠ³Ρ ΡΠ²ΡΠ·Π°ΡΡ CGroups ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π²ΠΌΠ΅ΡΡΠ΅ Π·Π½Π°ΡΠΈΠΌΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π°Π²Π΅ΡΡΠΈΠ² Π΄Π»Ρ Π²Π°Ρ ΠΊΠ°ΡΡΠΈΠ½Ρ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ mount ΠΈ ΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Linux ΠΏΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌ, ΡΠ°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ OpenShift ΠΈ Kubernetes.
[ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΡΡΡΡ: Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π³ΡΡΠΏΠΏ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ Podman]
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ mount
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ unshare -m
, Π²Π°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ΅ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π²Π½ΡΡΡΠΈ ΠΏΠ»ΠΎΡ
ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ , ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° Ρ
ΠΎΡΡ .
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π³ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½
Π’Π°ΠΊ Π² ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΎΠ³Π΄Π° ΡΠΌΡΡΠ» ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ mount? Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ tar-Π°ΡΡ ΠΈΠ² Alpine Linux.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π°Π³ΡΡΠ·ΠΈΡΠ΅ Π΅Π³ΠΎ, ΡΠ°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ Π² Π½ΠΎΠ²ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ² ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π΄Π»Ρ Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
[root @ localhost ~] ΡΠΊΡΠΏΠΎΡΡ CONTAINER_ROOT_FOLDER = / container_practice
[root @ localhost ~] mkdir -p $ {CONTAINER_ROOT_FOLDER} / fakeroot
[root @ localhost ~] cd $ {CONTAINER_ROOT_FOLDER}
[root @ localhost ~] wget https://dl-cdn. alpinelinux.org/alpine/v3.13/releases/x86_64/alpine-minirootfs-3.13.1-x86_64.tar.gz
[ΠΊΠΎΡΠ΅Π½Ρ @ localhost ~] tar xvf alpine-minirootfs-3.13.1-x86_64.tar.gz -C fakeroot
[root @ localhost ~] chown ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. -R $ {CONTAINER_ROOT_FOLDER} / fakeroot
ΠΠ°ΡΠ°Π»ΠΎΠ³ fakeroot
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ root ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ Π²Π½Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ . ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π²Π½ΡΡΡΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π±ΡΠ΄Π΅Ρ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ².Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Ρ
ΠΎΡΡΠ° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°ΠΉΠ»Ρ Alpine ΠΈΠ· Π°ΡΡ
ΠΈΠ²Π° (Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΊΠΎΡΠΎΡΡΡ
ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΠ΅Π½Ρ ).
ΠΡΠ°ΠΊ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ?
PS1 = '\ u @ new-mnt $' unshare -Umr
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ Ρ ΠΎΡΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ:
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ df -h
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ% Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π°
/ dev / mapper / cs-root 36 ΠΠ 5.2G 31G 15% /
tmpfs 737M 0 737M 0% / sys / fs / cgroup
devtmpfs 720M 0 720M 0% / dev
tmpfs 737M 0 737M 0% / dev / shm
tmpfs 737M 8,6M 728M 2% / Π·Π°ΠΏΡΡΠΊ
tmpfs 148M 0 148M 0% / run / user / 0
/ dev / vda1 976M 197M 713M 22% / boot
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ ls /
bin container_practice ΠΈ Ρ. Π΄. lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΎΠ³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ systemd
ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌΠΈ ΠΈΠΌΠ΅Π½.ΠΡΠ»ΠΈ Π²Ρ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ tmpfs
Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, / mnt
Π²Π½ΡΡΡΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ Ρ
ΠΎΡΡ Π΅Π΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ?
ΠΊΠΎΡΠ΅Π½Ρ @ Π½ΠΎΠ²ΡΠΉ-mnt $ mount -t tmpfs tmpfs / mnt
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ findmnt | grep mnt
ββ / mnt tmpfs tmpfs rw, relatime, seclabel, uid = 1000, gid = 1000
Π₯ΠΎΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎΠ³ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ:
[ΠΊΠΎΡΠ΅Π½Ρ @ localhost ~] # findmnt | grep mnt
ΠΡΠ°ΠΊ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ mount ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΡΠΎ Ρ ΠΎΡΠΎΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΡΡΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π― ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅Π·ΡΠΌΠΈΡΡΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΡΠ°ΡΡΡ ΠΠ°ΠΉΠΊΠ»Π° ΠΠ΅ΡΡΠΈΡΠΊΠ° LWN, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° Π΄Π»Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ mount. ΠΠ±ΡΡΠ½ΠΎ Ρ Π½Π΅ ΡΠ°ΠΊ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅Π»Π΅Π³ΠΊΠΎ ΡΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈ Π½Π° (Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ) ΠΏΡΠΎΡΡΠΎΠΌ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
Π’Π΅ΠΎΡΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ
ΠΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ·-Π·Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΄ΡΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΎΠ±ΡΠΈΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ .ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Π½Π΅ΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΈΠΏ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ. ΠΡΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, Π±ΡΠ΄ΡΡ Π»ΠΈ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΏΡΡΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ°. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ / cdrom
, Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½ΠΎ Π² Π΄ΡΡΠ³ΠΈΡ
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ
ΠΈΠΌΠ΅Π½, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΠΈΠΏ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ.
ΠΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΡΠ΅ Π³ΡΡΠΏΠΏΡ ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ ΡΠ΄ΡΡ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ Β« ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²Π°Ρ Π³ΡΡΠΏΠΏΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π³ΡΡΠΏΠΏΠ° vfsmounts, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ.Β«Π‘ΠΎΠ±ΡΡΠΈΡ - ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ° ΠΈΠ»ΠΈ ΡΠ°Π·ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΡΠΏΡΠΎΡΠΈΡΠ΅ Π²Ρ? Π§ΡΠΎ ΠΆ, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ Π΄ΠΎΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π³ΡΡΠΏΠΏΡ ΡΠ°Π²Π½ΠΎΠΏΡΠ°Π²Π½ΡΡ ΡΠ·Π»ΠΎΠ² , ΡΠ°ΡΡΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ°ΡΡΠΈΠΌ ΡΠ°ΠΊΡΠΎΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄Π΅Π½ ΠΈ Ρ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΠ»Π΅Π½ Π² ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠΎΠΉ ΠΆΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ΄ΡΠ°, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
- ΠΎΠ±ΡΠΈΠΉ - ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅.ΠΡΠ±ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΠ»Π΅Π½ΠΎΠ² ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΠΎΠΉ Π³ΡΡΠΏΠΏΡ.
- slave - ΠΠ΄Π½ΠΎΡΡΠΎΡΠΎΠ½Π½Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅. ΠΠ»Π°Π²Π½Π°Ρ ΡΠΎΡΠΊΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π° Π²Π΅Π΄ΠΎΠΌΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π½ΠΎ Π²Π΅Π΄ΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ Π²Π΅Π΄ΠΎΠΌΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ.
- ΠΎΠ±ΡΠΈΠΉ ΠΈ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΡΠΉ - ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΎΡΠΊΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π³Π»Π°Π²Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π³ΡΡΠΏΠΏΡ ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΡΡ ΡΠ·Π»ΠΎΠ². ΠΠ°ΡΡΠ΅Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ Π²ΡΠ΅ ΡΠ»Π΅Π½Ρ Π³ΡΡΠΏΠΏΡ ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΡΡ ΡΠ·Π»ΠΎΠ², ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΡ, Π±ΡΠ΄ΡΡ.
- ΡΠ°ΡΡΠ½ΡΠΉ - Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ.
- unbindable - ΠΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ, Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΊ .
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ - Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ . ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ /
ΠΈ / boot
, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°ΡΡΠ½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠΌΠ° Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΠ΅ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ΅ΠΉΡΠ°Ρ. Π― ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠ°ΠΊ Go ΠΈΠ»ΠΈ C, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΠ΄ΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° (ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²) ΠΈΠΌΠ΅Π½. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΠΎΠ²ΠΊΠΈ Ρ bash, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
Π½Π΅ Π΄Π΅Π»ΠΈΡΡΡΡ -Urm
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΎΠΊΠ°ΠΆΠ΅ΡΠ΅ΡΡ Π²Π½ΡΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° findmnt
ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ (Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ Ρ ΡΠ΄Π°Π»ΠΈΠ» Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· Π²ΡΠ²ΠΎΠ΄Π°):
findmnt | ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ grep
/ / Dev / mapper / cs-root xfs rw, relatime, [. ..]
ΠΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΠΎΡΠΊΠ° ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅Π»Ρ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ².ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π΅ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Alpine:
ΡΠΊΡΠΏΠΎΡΡ CONTAINER_ROOT_FOLDER = / container_practice
mount --bind $ {CONTAINER_ROOT_FOLDER} / fakeroot $ {CONTAINER_ROOT_FOLDER} / fakeroot
cd $ {CONTAINER_ROOT_FOLDER} / fakeroot
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ pivot_root
Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ chroot
. pivot_root
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: new_root
ΠΈ old_root
(ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ put_old
). pivot_root
ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ put_old
ΠΈ Π΄Π΅Π»Π°Π΅Ρ new_root
Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΠΠΠΠ : ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ chroot
. chroot
ΡΠ°ΡΡΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. Π Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΡΠΎ ΠΏΡΠ°Π²Π΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠΏΡΡ. Π’ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ chroot
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ chroot
Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Linux, ΠΎ ΠΊΠΎΡΠΎΡΡΡ
Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½.ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΠ΄ΡΠ°. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΡΠ½ΡΠΉ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π΅ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΠΎΠ³ΠΎ chroot
. ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ mount ΠΈ user ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ pivot_root
Π±Π΅Π· ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ:
pivot_root: Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ `. ' to `old_root / ': Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Alpine, ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ old_root
, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ (Alpine).ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Alpine Linux Π½Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ / bin
ΠΈ / sbin
, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΡ
Π² ΡΠ²ΠΎΠΉ ΠΏΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΠ°Π·ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ old_root
:
ΠΌΠΊΠ΄ΠΈΡ old_root
pivot_root. old_root
ΠΠ£Π’Π¬ = / bin: / sbin: $ ΠΠ£Π’Π¬
umount -l / ΡΡΠ°ΡΡΠΉ_root
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π²Π°Ρ Π΅ΡΡΡ Ρ
ΠΎΡΠΎΡΠ°Ρ ΡΡΠ΅Π΄Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈ ΠΌΠΎΠ½ΡΠΈΡΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΠΎΡ Ρ
ΠΎΡΡΠ°. Π£ Π²Π°Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π²ΠΎΠΈΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ Π½Π° Ρ
ΠΎΡΡΠ΅.ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π²Π²Π΅ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ findmnt
, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠ°Π½ΡΡΠ΅:
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ findmnt
-bash: findmnt: ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ:
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ ls -l /
Π²ΡΠ΅Π³ΠΎ 12
drwxr-xr-x 2 root root 4096 28 ΡΠ½Π²Π°ΡΡ 21:51 bin
drwxr-xr-x 2 root root 18 17 ΡΠ΅Π² 22:53 dev
drwxr-xr-x 15 root root 4096 28 ΡΠ½Π²Π°ΡΡ 21:51 ΠΈ Ρ. Π΄.
drwxr-xr-x 2 root root 6 28 ΡΠ½Π² 21:51 Π΄ΠΎΠΌΠΎΠΉ
drwxr-xr-x 7 root root 247 28 ΡΠ½Π²Π°ΡΡ 21:51 lib
drwxr-xr-x 5 root root 44 28 ΡΠ½Π²Π°ΡΡ 21:51 ΠΌΠ΅Π΄ΠΈΠ°
drwxr-xr-x 2 root root 6 28 ΡΠ½Π² 21:51 ΠΌΠΈΠ½.
drwxrwxr-x 2 root root 6 ΡΠ΅Π² 17 23:09 old_root
drwxr-xr-x 2 root root 6 28 ΡΠ½Π²Π°ΡΡ 21:51 opt
drwxr-xr-x 2 root root 6 28 ΡΠ½Π² 21:51 proc
drwxr-xr-x 2 root root 6 17 ΡΠ΅Π² 22:53 put_old
drwx ------ 2 ΠΊΠΎΡΠ΅Π½Ρ ΠΊΠΎΡΠ΅Π½Ρ 27 ΡΠ΅Π² 17 22:53 ΠΊΠΎΡΠ΅Π½Ρ
drwxr-xr-x 2 root root 6 28 ΡΠ½Π² 21:51 Π·Π°ΠΏΡΡΡΠΈΡΡ
drwxr-xr-x 2 root root 4096 28 ΡΠ½Π² 21:51 sbin
drwxr-xr-x 2 root root 6 28 ΡΠ½Π² 21:51 srv
drwxr-xr-x 2 root root 6 28 ΡΠ½Π²Π°ΡΡ 21:51 sys
drwxrwxrwt 2 root root 6 ΡΠ΅Π² 19 16:38 tmp
drwxr-xr-x 7 root root 66 28 ΡΠ½Π² 21:51 usr
drwxr-xr-x 12 root root 137 28 ΡΠ½Π²Π°ΡΡ 21:51 var
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ mount
mount: no / proc / mounts
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° proc
Π½Π΅ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π°. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ:
ΠΊΠΎΡΠ΅Π½Ρ @ Π½ΠΎΠ²ΡΠΉ-mnt $ mount -t proc proc / proc
mount: Π² ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΎΡΠΊΠ°Π·Π°Π½ΠΎ (Π²Ρ root?)
ΠΊΠΎΡΠ΅Π½Ρ @ new-mnt $ whoami
ΠΊΠΎΡΠ΅Π½Ρ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ proc
- ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ ΡΠΈΠΏ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½ PID, Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΅Π³ΠΎ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΠ΅ΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°Π» ΡΠ°Π½Π΅Π΅. Π― ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡ ΡΡΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ PID. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ, Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ Π½ΠΈΠΆΠ΅:
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡ ΡΡΡ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ Π΅ΠΉ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°, Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ.
[Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ API: 7 Π»ΡΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ API]
ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π» Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΡΡ ΡΠ΅ΠΎΡΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ mount. Π― ΠΎΠ±ΡΡΠ΄ΠΈΠ» Π³ΡΡΠΏΠΏΡ ΠΎΠ΄Π½ΠΎΡΠ°Π½Π³ΠΎΠ²ΡΡ
ΡΠ·Π»ΠΎΠ² ΠΈ ΠΈΡ
ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡΠΌ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ»Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ Π²Ρ Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Alpine Linux, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠ° Π½Π° chroot
, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ.
Π ΠΏΠΎΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ
ΡΠΈΡΡΠ΅ΠΌ Π²Π½ΡΡΡΠΈ ΠΈ Π²Π½Π΅ Π²Π°ΡΠ΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ±ΡΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ , , , ΡΠ°ΡΡΠ½ΡΠΉ, ΠΈ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΡΠΉ, . Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ PID, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ proc
ΠΈ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² Python - Real Python
ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Python.ΠΠ½ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅Π³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Python Π·Π°ΠΏΡΡΠ΅Π½. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
>>>
>>> dir (__ builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError',
BaseException, BlockingIOError, BrokenPipeError, BufferError,
BytesWarning, ChildProcessError, ConnectionAbortedError,
'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError',
'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError',
'ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅', 'ΠΠΎΠΆΡ', 'FileExistsError', 'FileNotFoundError',
'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError',
ImportError, ImportWarning, IndentationError, IndexError,
InterruptedError, IsADirectoryError, KeyError, KeyboardInterrupt,
LookupError, MemoryError, ModuleNotFoundError, NameError, None,
NotADirectoryError, NotImplemented, NotImplementedError, OSError,
'OverflowError', 'PendingDeprecationWarning', 'PermissionError',
'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning',
RuntimeError, RuntimeWarning, StopAsyncIteration, StopIteration,
SyntaxError, SyntaxWarning, SystemError, SystemExit, TabError,
TimeoutError, True, TypeError, UnboundLocalError,
UnicodeDecodeError, UnicodeEncodeError, UnicodeError,
UnicodeTranslateError, UnicodeWarning, UserWarning, ValueError,
'ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅', 'ZeroDivisionError', '_', '__build_class__', '__debug__',
'__doc__', '__import__', '__loader__', '__name__', '__package__',
'__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray',
'bytes', 'callable', 'chr', 'classmethod', 'compile', 'ΡΠ»ΠΎΠΆΠ½ΡΠΉ',
'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate',
'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset',
getattr, globals, hasattr, hash, help, hex, id, input,
'int', 'isinstance', 'issubclass', 'iter', 'len', 'Π»ΠΈΡΠ΅Π½Π·ΠΈΡ', 'ΡΠΏΠΈΡΠΎΠΊ',
'locals', 'map', 'max', 'memoryview', 'min', 'next', 'ΠΎΠ±ΡΠ΅ΠΊΡ', 'oct',
'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr',
'reverse', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ', 'ΠΊΡΡΠ³Π»ΡΠΉ', 'Π½Π°Π±ΠΎΡ', 'setattr', 'slice', 'sorted', 'staticmethod',
str, sum, super, tuple, type, vars, zip]
ΠΠ΄Π΅ΡΡ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ StopIteration
, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ max ()
ΠΈ len ()
, ΠΈ ΡΠΈΠΏΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ int
ΠΈ ΡΠ».
.
ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Python ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½. ΠΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
Π―Π±Π»ΠΎΠΊΠΈ | ΠΠ°Π½Π°Π½Ρ |
ΠΡΠΎΡ XML-ΠΊΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠΎΠ»Π΅ (ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ΅ ΠΌΠ΅Π±Π΅Π»ΠΈ):
<ΡΠ°Π±Π»ΠΈΡΠ°>
ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ XML Π±ΡΠ»ΠΈ ΡΠ»ΠΎΠΆΠ΅Π½Ρ Π²ΠΌΠ΅ΡΡΠ΅, Π²ΠΎΠ·Π½ΠΈΠΊ Π±Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ ΠΈΠΌΠ΅Π½. ΠΠ±Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
Π―Π±Π»ΠΎΠΊΠΈ | ΠΠ°Π½Π°Π½Ρ |
ΠΡΠΎΡ XML-ΠΊΠΎΠ΄ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ΅ ΠΌΠ΅Π±Π΅Π»ΠΈ:
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
XSLT - ΡΡΠΎ ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Π² Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΡ.
XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π½ΠΈΠΆΠ΅ - ΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ XML Π² HTML.
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ http://www.w3.org/1999/XSL/Transform ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ XSLT
ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π½ΡΡΡΠΈ HTML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°:
"?>
xmlns: xsl = "http://www.w3.org/1999/XSL/Transform">
ΠΠΎΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠΎΠ²
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ | Π₯ΡΠ΄ΠΎΠΆΠ½ΠΈΠΊ |
---|---|
| |
xsl: template>
xsl: stylesheet>
ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ XSLT, ΠΏΡΠΎΡΡΠΈΡΠ΅ Π½Π°Ρ
Π£ΡΠ΅Π±Π½ΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅ ΠΏΠΎ XSLT.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ : ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ - Π±ΠΈΠ·Π½Π΅Ρ-ΠΊΠ»Π°ΡΡ [2021]
ΠΡΠΈΠΌΠ΅ΡΡ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ. ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ°ΠΌΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ .
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠΎΠ΄, Π½ΠΎ Π½Π΅ Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°ΠΉΡΠ΅ΡΡ Π½Π° Π΄Π΅ΡΠ°Π»ΡΡ . ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΡΡΠ΅ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, Π° Π½Π΅ Π½Π° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ²Π°Π»ΠΈ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ.
Π / Π‘ ++
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ setPrice (). Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ Java ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
ΠΠ°ΠΊΠ΅Ρ Java
Π Java ΠΏΠ°ΠΊΠ΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½. ΠΡΠΎ ΡΠ° ΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ, ΡΡΠΎ ΠΈ Π² C ++ (ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½). ΠΡ Π³ΡΡΠΏΠΏΠΈΡΡΠ΅ΡΠ΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½ΡΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Java Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Coffee.
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΊΠΎΠ΄Π΅ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Β«ΠΠΎΡΠ΅Β» ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²: ΠΊΠΎΡΠ΅ ΠΈ ΠΏΡΠΎΠ΄Π°Π²ΡΠ°. Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ Coffee, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΠΈΠΌΠ΅Π½ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° (ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΡΡ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
ΠΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, Π²ΠΊΠ»ΡΡΠ°ΡΡ Visual Basic ΠΈ C #. ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΠΈ.
XML
XML ΠΈΠ»ΠΈ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ.XML ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π² XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ , ΡΡΠΎΠ±Ρ Π°ΡΡΠΈΠ±ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ»ΠΈΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΡΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ , Π΄Π²Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΡΡΡ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½, ΡΡΠΎΠ±Ρ ΠΌΡ Π·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊΠ°Ρ ΡΠ΅Π½Π° ΠΈΠ»ΠΈ ΡΡΠ°Π²ΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ.
Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Unix ΠΈ Windows ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ:
- C: \ Users \ mdg13 \ Documents \ - ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Windows, Π³Π΄Π΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ mdg13. Π£ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² ΡΠ΅ΡΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΠ°ΠΏΠΊΠ°.
- / usr / local / apache - ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ Unix, Π³Π΄Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠ°ΠΉΠ»Ρ Apache.
Π Π»ΡΠ±ΠΎΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ 100 Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠ΅ΡΠΊΠΎΠΉ Document1.docx, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½ / ΠΏΠ°ΠΏΠΊΠ°Ρ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ.
Π‘Π΅ΡΡ
ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠ΅ΡΡΡ , ΠΊΠ°ΠΊ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠ½ΠΎΠΉ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΠ΅ΡΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π΄ΠΎΠΌΠ΅Π½Π°, ΠΏΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΠΎ Π΄ΠΎΠΌΠ΅Π½Π΅ Amazon. ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°ΠΉΡΡ ΠΏΠΎΠ΄ Π½ΠΈΠΌ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ. ΠΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΠ°ΠΉΡΠΎΠ² Amazon Π² ΠΠ°Π½Π°Π΄Π΅, Π―ΠΏΠΎΠ½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΠ½Π΄ΠΈΠΈ? ΠΠ»Ρ Amazon ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π³Π΅ΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΡΡ Π² Π΄ΠΎΠΌΠ΅Π½Π΅ Amazon, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ. ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ.
ΠΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° setPrice () Π² ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΈΠΌΠ΅Π½. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° Π΄Π»Ρ ΡΡΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½.
ΠΡΠ°ΡΠΊΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΊΠ°
Π ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΠΏΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΎΡ Π²Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ Π²Π΅ΡΡ Π±ΠΈΠ·Π½Π΅Ρ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ setPrice (), ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ C / C ++, Java, Visual Basic ΠΈ C #. Java ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ, ΡΡΠΎ ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½.ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΡΠ΅ΡΠ΅Π²ΡΡ Π΄ΠΎΠΌΠ΅Π½Π°Ρ ΠΈ Π² XML Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ . ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ . ΠΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ - Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π½ΡΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.
5. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° - Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Python 3.9.5
ΠΠΎΠ΄
Python Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ΄Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅
Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ°. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ import
Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ°, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ
ΡΠΏΠΎΡΠΎΠ±.Π’Π°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ importlib.import_module ()
ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅
__import __ ()
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ import
ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π΄Π²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ; ΠΎΠ½ ΠΈΡΠ΅Ρ
Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ
ΡΡΠ΅ΡΠ°. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° import
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ
Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ __import __ ()
Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ __import __ ()
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° import
.Π£Π²ΠΈΠ΄Π΅ΡΡ
import
statement Π΄Π»Ρ ΡΠΎΡΠ½ΡΡ
Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΡΡΠΌΠΎΠΉ Π²ΡΠ·ΠΎΠ² __import __ ()
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΈΡΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ, Π΅ΡΠ»ΠΈ
Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ. Π₯ΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ,
ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΊΠ΅ΡΠ΅ΠΉ
(Π²ΠΊΠ»ΡΡΠ°Ρ sys. modules
), ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ import
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΈΠΌΠ΅Π½ΠΈ.
ΠΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ import
, ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ
__import __ () ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
.ΠΡΡΠ³ΠΈΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π°
ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, importlib.import_module ()
) ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΎΠ±Ρ
ΠΎΠ΄
__import __ ()
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ, Python ΠΈΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°ΠΉΠ΄Π΅Π½,
ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡ Π΅Π³ΠΎ. ΠΡΠ»ΠΈ Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ModuleNotFoundError
. Python ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅
ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ°
Π²ΡΠ·Π²Π°Π½.ΠΡΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
Ρ
ΡΠΊΠΎΠ².
ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π°Ρ
Π½ΠΈΠΆΠ΅.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.3: Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° Π±ΡΠ»Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΎΡΡΡ ΡΠ°Π·Ρ
ΠΈΠ· ΠΠΠ 302 . ΠΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ° - ΠΏΠΎΠ»Π½ΡΠΉ
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ββΡΠ΅ΡΠ΅Π· sys. meta_path
. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ,
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ (ΡΠΌ. PEP 420 ).
ΠΠΎΠ΄ΡΠ»Ρ importlib
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΎΠ³Π°ΡΡΠΉ API Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ
ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ°.ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, importlib.import_module ()
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ
ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ API, ΡΠ΅ΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ __import __ ()
Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π°
ΠΈΠΌΠΏΠΎΡΡΠ½Π°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ°. Π‘ΠΌ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ importlib
.
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π΄Π΅ΡΠ°Π»Ρ.
5.2. ΠΠ°ΠΊΠ΅ΡΡ
Python ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ Π²ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΡΠΈΠΏΡ,
Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° Python, C ΠΈΠ»ΠΈ ΡΠ΅ΠΌ-ΡΠΎ Π΅ΡΠ΅
Π΅ΡΠ΅. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡ ΠΈΠΌΠ΅Π½, Π² Python Π΅ΡΡΡ
ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
ΠΠ°ΠΊΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, Π° ΠΌΠΎΠ΄ΡΠ»ΠΈ - ΠΊΠ°ΠΊ
ΡΠ°ΠΉΠ»Ρ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ
, Π½ΠΎ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ»Ρ
Π² ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΈ ΡΠ°ΠΉΠ»Ρ. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠ°ΠΊΠ΅ΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ
ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡΠ΅ΡΠΊΠΈ, ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΡΠ°ΠΌΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅
ΡΡΠ°ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅
ΠΌΠΎΠ΄ΡΠ»ΠΈ - ΡΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ.ΠΠ»ΠΈ, Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠ°ΠΊΠ΅ΡΡ - ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ Π²ΠΈΠ΄
ΠΌΠΎΠ΄ΡΠ»Ρ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡ __path__
, ΡΠ²Π»ΡΠ΅ΡΡΡ
ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ.
Π£ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΅ΡΡΡ ΠΈΠΌΡ. ΠΠΌΠ΅Π½Π° ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΎΡΠ΄Π΅Π»Π΅Π½Ρ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ
Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ΡΠ΅Π· ΡΠΎΡΠΊΡ, ΡΡΠΎ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ Python. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ
Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ sys
ΠΈ ΠΏΠ°ΠΊΠ΅Ρ email
,
ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ email.mime
ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π²Π½ΡΡΡΠΈ
ΡΡΠΎΡ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΠΎΠΉ .mime.text
.
5.2.1. ΠΠ±ΡΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ
Python ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²: ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ΠΠ±ΡΡΠ½ΡΠΉ
ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π² Python 3.2 ΠΈ ΡΠ°Π½Π΅Π΅.
ΠΠ±ΡΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ
__init__.py
ΡΠ°ΠΉΠ». ΠΠΎΠ³Π΄Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΠΎ
__init__.py Π€Π°ΠΉΠ»
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΡΠ²Π½ΠΎ, ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΡ
ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅ΡΠ°.Π€Π°ΠΉΠ» __init__.py
ΠΌΠΎΠΆΠ΅Ρ
ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Python, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, Π° Python
Π΄ΠΎΠ±Π°Π²ΠΈΡ Π² ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ°ΠΊΠ΅Ρ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²Π΅ΡΡ
Π½ΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ
ΠΏΠ°ΠΊΠ΅Ρ Ρ ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ:
ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ / __init__.py ΠΎΠ΄ΠΈΠ½/ __init__.py Π΄Π²Π°/ __init__.py ΡΡΠΈ/ __init__.py
ΠΠΌΠΏΠΎΡΡ parent.one
Π½Π΅ΡΠ²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ parent / __ init__.py
ΠΈ
ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ / ΠΎΠ΄ΠΈΠ½ / __ init__.py
. ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ
. ΠΠ²ΡΡ
ΠΈΠ»ΠΈ
parent. three
Π²ΡΠΏΠΎΠ»Π½ΠΈΡ parent / two / __ init__.py
ΠΈ
parent / three / __ init__.py
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
5.2.2. ΠΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
ΠΠ°ΠΊΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ,
Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠ°ΡΡΡ Π²Π½ΠΎΡΠΈΡ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ. ΠΠΎΡΡΠΈΠΈ
ΠΌΠΎΠ³ΡΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ
ΠΌΠ΅ΡΡΠ°Ρ
ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΡΡΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ
Π½Π°ΠΉΠ΄Π΅Π½Ρ Π² zip-ΡΠ°ΠΉΠ»Π°Ρ
, Π² ΡΠ΅ΡΠΈ ΠΈΠ»ΠΈ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ Python Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ
Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°.ΠΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ³ΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π°ΠΏΡΡΠΌΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅; ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ
__path__
Π°ΡΡΠΈΠ±ΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΠΈΡΠΊ ΡΠ°ΡΡΠ΅ΠΉ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ° Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΡΡΡ ΠΊ ΠΈΡ
ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΏΠ°ΠΊΠ΅ΡΡ (ΠΈΠ»ΠΈ sys.path
Π΄Π»Ρ
ΠΏΠ°ΠΊΠ΅Ρ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ) ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ.
Π ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ Π½Π΅Ρ ΡΠ°ΠΉΠ»Π° parent / __ init__.py
. ΠΠΎ ΡΠ°ΠΊΡΡ,
Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²
, Π³Π΄Π΅
ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΡΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ / ΠΎΠ΄ΠΈΠ½
Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ
ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΡΡΠ΄ΠΎΠΌ Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΌ / Π΄Π²ΡΠΌΡ
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Python ΡΠΎΠ·Π΄Π°ΡΡ
ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄Π»Ρ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°
Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ·
Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ.
Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ PEP 420 Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
5.3. Π ΠΏΠΎΠΈΡΠΊΠ°Ρ
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊ, Python Π½ΡΠΆΠ΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ
ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ (ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°, Π½ΠΎ Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ
ΡΠ°Π·Π½ΠΈΡΠ° Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½Π°) ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ. ΠΡΠΎ ΠΈΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡΡ ΠΎΡ ΡΠ°Π·Π½ΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ import
ΠΈΠ»ΠΈ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π²
importlib.import_module ()
ΠΈΠ»ΠΈ __import __ ()
ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠΎ ΠΈΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΡΠ°ΠΏΠ°Ρ
ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
ΠΏΡΠ½ΠΊΡΠΈΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ, e. Π³ΡΠ°ΠΌΠΌ. foo.bar.baz
. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Python
ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ foo
, Π·Π°ΡΠ΅ΠΌ foo.bar
ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, foo.bar.baz
.
ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ° ModuleNotFoundError
.
5.3.1. ΠΠΎΠ΄ΡΠ»Ρ cache
ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ°, - sys.modules
. ΠΡΠΎΡ
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠΈΡ ΠΊΠ΅ΡΠ΅ΠΌ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ°Π½Π΅Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ,
Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΠΏΡΡΠΈ. ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ foo.bar.baz
ΡΠ°Π½Π΅Π΅ Π±ΡΠ»
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ, sys.modules
Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ foo
, foo.bar
,
ΠΈ foo.bar.baz
. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΡΠ΅ΡΡΡ Π² sys.modules
ΠΈ Π΅ΡΠ»ΠΈ
ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ - ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡΡ, Π°
ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ ΠΠ΅Ρ
, ΡΠΎ
ModuleNotFoundError
Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ. ΠΡΠ»ΠΈ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, Python Π±ΡΠ΄Π΅Ρ
ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΏΠΎΠΈΡΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ.
sys.modules
Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡΡ
ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π½Π΅Π³ΠΎ),
Π½ΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ Π·Π°ΠΏΠΈΡΡ Π² ΠΊΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ
Python Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ
ΠΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ»ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ Π½Π° ΠΠ΅Ρ
, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ.
ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ModuleNotFoundError
.
ΠΠ΄Π½Π°ΠΊΠΎ Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π²Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΠ΅ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ,
ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡ Π² ΠΊΡΡΠ΅ sys.modules
, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ
Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄ΡΡ , Π° Π½Π΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ. ΠΠ°ΠΏΡΠΎΡΠΈΠ²,
importlib.reload ()
Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΏΡΠΎΡΡΠΎ
ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΠ² ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ.
5.
3.2. ΠΡΠΊΠ°ΡΠ΅Π»ΠΈ ΠΈ ΠΏΠΎΠ³ΡΡΠ·ΡΠΈΠΊΠΈ
ΠΡΠ»ΠΈ Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² sys.ΠΌΠΎΠ΄ΡΠ»ΠΈ
, Π·Π°ΡΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡΡ Python
ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ·
Π΄Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈΡΠΊΠ°ΡΠ΅Π»ΠΈ ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΈ.
ΠΠ°Π΄Π°ΡΠ° ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ° - ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΎΠ½ Π½Π°ΠΉΡΠΈ Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ
ΠΊΠ°ΠΊΡΡ Π±Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΠΎΠ½ Π½ΠΈ Π·Π½Π°Π». ΠΠ±ΡΠ΅ΠΊΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΠΎΠ±Π° ΡΡΠΈΡ
ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠ΅ΡΠ°ΠΌΠΈ - ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ
ΡΠ°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ, ΡΡΠΎ ΠΌΠΎΠ³ΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
Python Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΡΠ΄ ΡΡΠ΅Π΄ΡΡΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ΅ΡΠ²ΡΠΉ
Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ Π½Π°ΠΉΡΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π° Π²ΡΠΎΡΠΎΠΉ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ Π½Π°ΠΉΡΠΈ
Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ.Π’ΡΠ΅ΡΠΈΠΉ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΡΠ΅Ρ ΠΏΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠ°
Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° - ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ
ΠΈΠΌΠ΅Π½Π° ΠΏΡΡΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ zip-ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°
Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ URL-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ.
ΠΠΌΠΏΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ.
Finders ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΡΠ»ΠΈ ΠΈΠΌ ΡΠ΄Π°ΡΡΡΡ Π½Π°ΠΉΡΠΈ Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ½ΠΈ
Π²Π΅ΡΠ½ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ , ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΠΈΠΌΠΏΠΎΡΡΡ
ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ°Π·Π΄Π΅Π»Π°Ρ
ΠΎΠΏΠΈΡΠ°Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠΎΠ² ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² Π² Π±ΠΎΠ»Π΅Π΅
ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠ°ΡΡΠΈΡΠΈΡΡ
ΠΈΠΌΠΏΠΎΡΡΠ½Π°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ°.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
Python ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΈ.
Π½Π°ΠΏΡΡΠΌΡΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ².
ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊΠΈ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°, Π½ΠΎ Π½Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ.
5.3.3. ΠΡΡΡΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠ½ΡΠ΅
ΠΠΌΠΏΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ; ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ
ΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠ½ΡΠ΅ ΠΊΡΡΡΠΊΠΈ .ΠΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠΈΠΊΠΎΠ² ΠΈΠΌΠΏΠΎΡΡΠ°: ΠΌΠ΅ΡΠ°
Ρ
ΡΠΊΠΈ ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡ Ρ
ΡΠΊΠΈ ΠΏΡΡΠΈ .
ΠΠ΅ΡΠ°-Ρ
ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°, ΠΏΠ΅ΡΠ΅Π΄ Π»ΡΠ±ΡΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ
ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠΌΠΏΠΎΡΡΠ°, ΠΊΡΠΎΠΌΠ΅ sys.modules ΠΏΠΎΠΈΡΠΊ Π² ΠΊΡΡΠ΅
.
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΌΠ΅ΡΠ°-Ρ
ΡΠΊΠ°ΠΌ ΠΎΡΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ sys.path
, Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½ΠΎ
ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠ΅ΡΠ°-Ρ
ΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡΡΡ ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ
ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊ sys.meta_path
, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π½ΠΈΠΆΠ΅.
ΠΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠΈΠΊΠΈ ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ sys.ΠΏΡΡΡ
(ΠΈΠ»ΠΈ
package .__ path__
) Π² ΡΠΎΡΠΊΠ΅, Π³Π΄Π΅ ΠΈΡ
ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΏΡΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ. ΠΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠΈΠΊΠΈ ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡΡΡ ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
ΠΊ sys.path_hooks
, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π½ΠΈΠΆΠ΅.
5.3.4. ΠΠ΅ΡΠ°-ΠΏΡΡΡ
ΠΠΎΠ³Π΄Π° Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ Π² sys.modules
, Python ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ sys.meta_path
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ΅Π΄ΡΡΠ² ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ
ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΡΠΈ ΠΈΡΠΊΠ°ΡΠ΅Π»ΠΈ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, Π·Π½Π°ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ
Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠΈ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ
find_spec ()
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
ΠΈΠΌΡ, ΠΏΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ΅ΡΠ°-ΠΏΡΡΡ
Finder ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΎΠ½ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ
Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΡΠ»ΠΈ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ, ΠΎΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΠ΅Ρ
. ΠΡΠ»ΠΈ
sys.meta_path
ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ° ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π±Π΅Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ°
ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ModuleNotFoundError
.ΠΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
ΠΏΠΎΠ΄Π½ΡΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π²Π²Π΅ΡΡ
, ΠΏΡΠ΅ΡΡΠ²Π°Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠ΅ΡΠΎΠ΄ find_spec ()
ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ
Finders Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ Π΄Π²ΡΠΌΡ ΠΈΠ»ΠΈ ΡΡΠ΅ΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ΅ΡΠ²ΡΠΉ - ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ
ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ foo.bar.baz
.
ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - ΡΡΠΎ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ»Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - ΠΠ΅Ρ
, Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ»ΠΈ
ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°
__path__
Π°ΡΡΠΈΠ±ΡΡ.ΠΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡ __path__
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ModuleNotFoundError
. Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
- ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°Π³ΡΡΠΆΠ΅Π½ ΠΏΠΎΠ·ΠΆΠ΅.
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΠ΅ΡΠ°-ΠΏΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΉΠ΄Π΅Π½ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΈΠΌΠΏΠΎΡΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ» ΠΊΡΡΠΈΡΠΎΠ²Π°Π½,
ΠΈΠΌΠΏΠΎΡΡ foo.bar.baz
ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π²ΡΠ·ΡΠ²Π°Ρ
ΠΌΠΈΠ»Ρ Π½Π° ΡΡΡ.find_spec ("foo", None, None)
Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ ( mpf
). ΠΠΎΡΠ»Π΅
foo
Π±ΡΠ»ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ, foo.bar
Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±Ρ
ΠΎΠ΄Π°
ΠΌΠ΅ΡΠ°-ΠΏΡΡΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π·, Π²ΡΠ·ΡΠ²Π°Ρ
mpf.find_spec ("foo.bar", foo .__ path__, None)
. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ foo.bar
Π±ΡΠ»
ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ, ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±Ρ
ΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π΅Ρ
mpf.find_spec ("foo.bar.baz", foo.bar .__ path__, None)
.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ°-ΠΏΡΡΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠΏΠΎΡΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅ΡΡ Π±ΡΠ΄ΡΡ
Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΠ΅Ρ
, Π΅ΡΠ»ΠΈ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ, ΠΊΡΠΎΠΌΠ΅ ΠΠ΅Ρ
ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ
ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
Python ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ sys.meta_path
ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠΌΠ΅Π΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠΌΠ΅Π΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΌΠΎΡΠΎΠΆΠ΅Π½Π½ΡΠ΅
ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΈ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΠ· ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°
(Ρ.Π΅. ΠΈΡΠΊΠ°ΡΠ΅Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ).
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: ΠΠ΅ΡΠΎΠ΄ find_spec ()
ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ
finders Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ find_module ()
, ΠΊΠΎΡΠΎΡΡΠΉ
ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΠ°ΡΠ΅Π»Π°. ΠΠΎΠΊΠ° ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ,
ΠΈΠΌΠΏΠΎΡΡΠ½Π°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΈΡΠΊΠ°ΡΠ΅Π»Ρ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ
find_spec ()
.
5.4. ΠΠ°Π³ΡΡΠ·ΠΊΠ°
ΠΡΠ»ΠΈ ΠΈ ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ (ΠΈ
Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ) ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΡ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅
ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°:
ΠΌΠΎΠ΄ΡΠ»Ρ = ΠΠ΅Ρ Π΅ΡΠ»ΠΈ spec.loader Π½Π΅ ΡΠ°Π²Π΅Π½ None ΠΈ hasattr (spec.loader, 'create_module'): # ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ exec_module ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ΅. module = spec.loader.create_module (ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ) Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ None: module = ModuleType (ΡΠΏΠ΅Ρ.Π½Π°Π·Π²Π°Π½ΠΈΠ΅) # ΠΠ΄Π΅ΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ: _init_module_attrs (ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΌΠΎΠ΄ΡΠ»Ρ) Π΅ΡΠ»ΠΈ spec.loader - ΠΠ΅Ρ: # Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠ΄Π½ΡΡΡ ImportError Π΅ΡΠ»ΠΈ spec.origin ΡΠ°Π²Π΅Π½ None ΠΈ spec.submodule_search_locations Π½Π΅ ΡΠ°Π²Π΅Π½ None: # ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ sys.modules [spec.name] = ΠΌΠΎΠ΄ΡΠ»Ρ elif not hasattr (spec.loader, 'exec_module'): module = spec.loader.load_module (spec.name) # Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ __loader__ ΠΈ __package__, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ. Π΅ΡΠ΅: sys.modules [spec.name] = ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΡΠ°ΡΡΡΡ: ΡΠΏΠ΅Ρ. Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ.exec_module (ΠΌΠΎΠ΄ΡΠ»Ρ) ΠΊΡΠΎΠΌΠ΅ BaseException: ΠΏΡΡΠ°ΡΡΡΡ: del sys.modules [ΠΈΠΌΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ] ΠΊΡΠΎΠΌΠ΅ KeyError: ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡ Π²Π΅ΡΠ½ΡΡΡ sys.modules [spec.name]
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅:
ΠΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²
sys.modules
, ΠΈΠΌΠΏΠΎΡΡ ΡΠΆΠ΅ Π²Π΅ΡΠ½ΡΠ» Π΅Π³ΠΎ.ΠΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π²
sys.modules
ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ.ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ
(ΠΏΡΡΠΌΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ) ΡΠ°ΠΌ ΠΈΠΌΠΏΠΎΡΡ; Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Π³ΠΎ Π²sys.modules
Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ Π² Ρ ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅
Π·Π°Π³ΡΡΠ·ΠΊΠ° Π² Π»ΡΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅.ΠΡΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»Π°ΡΡ, Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ - ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ -
ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ·sys.modules
. ΠΡΠ±ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΆΠ΅ Π²
sys.modules
cache ΠΈ Π»ΡΠ±ΠΎΠΉ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΊΠ°ΠΊ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΠΊΠ΅ΡΠ΅.ΠΡΠΎ ΠΊΠΎΠ½ΡΡΠ°ΡΡΠΈΡΡΠ΅Ρ Ρ
ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ°, ΠΊΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΡΡΠ°Π΅ΡΡΡ Π²sys.modules
.ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ°
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ (Β«_init_module_attrsΒ» Π²
ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄Π° Π²ΡΡΠ΅), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²
Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΠΉ ΡΠ°Π·Π΄Π΅Π».ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ - ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΎ
Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ.ΠΠΎΠ΄ΡΠ»Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π² exec_module (), ΠΌΠΎΠΆΠ΅Ρ
Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° Π²Π·ΡΠ»Π° Π½Π° ΡΠ΅Π±Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ
ΠΏΠΎΠ³ΡΡΠ·ΡΠΈΠΊΠΈ. Π Π°Π½Π΅Π΅ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ
importlib.abc.Loader.load_module ()
ΠΌΠ΅ΡΠΎΠ΄.
5.4.1. ΠΠΎΠ³ΡΡΠ·ΡΠΈΠΊΠΈ
ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π²Π°ΠΆΠ½Π΅ΠΉΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ: Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠΌΠΏΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ importlib.abc.Loader.exec_module ()
Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ· exec_module ()
ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ.
ΠΠΎΠ³ΡΡΠ·ΡΠΈΠΊΠΈ
Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ:
ΠΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ Python (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ»ΠΈ
Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅), Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ
Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ (module .__ dict__
).ΠΡΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π½ΡΡΡ
ImportError
, Ρ ΠΎΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ
exec_module ()
Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ.
ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
ΠΈΡΠΊΠ°ΡΠ΅Π»Ρ ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ; Π² ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
find_spec ()
ΠΏΡΠΎΡΡΠΎ Π²Π΅ΡΠ½Π΅Ρ
spec Ρ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π½Π° self
.
ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ.
ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° create_module ()
.
ΠΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ. create_module ()
Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ None
,
ΠΈΠΌΠΏΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: ΠΠ΅ΡΠΎΠ΄ load_module ()
Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π°
exec_module ()
ΠΈ ΠΈΠΌΠΏΠΎΡΡ
ΠΠ°ΡΠΈΠ½Ρ Π²Π·ΡΠ»ΠΈ Π½Π° ΡΠ΅Π±Ρ Π²ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ³ΡΡΠ·ΠΊΠ΅.
ΠΠ»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠ³ΡΡΠ·ΡΠΈΠΊΠ°ΠΌΠΈ ΠΈΠΌΠΏΠΎΡΡΠ½Π°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠ² load_module ()
, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π΄Π΅Π»Π°Π΅Ρ
Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ exec_module ()
.ΠΠ΄Π½Π°ΠΊΠΎ load_module ()
Π±ΡΠ»
ΡΡΡΠ°ΡΠ΅Π»ΠΎ, ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ exec_module ()
.
ΠΠ΅ΡΠΎΠ΄ load_module ()
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π²ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ Π²ΡΡΠ΅, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠ΅
ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ:
ΠΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ Ρ Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²
sys.modules
, Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.(Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅importlib.reload ()
Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.) ΠΡΠ»ΠΈ
Π½Π°Π·Π²Π°Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²sys.modules
, Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ
Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ Π²sys.modules
.ΠΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π²
sys.modules
ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅
Π·Π°Π³ΡΡΠ·ΠΊΠ°.ΠΡΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»Π°ΡΡ, Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ Π²ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ.
Π²ΡΠΈΡΡΠ΅ΠΌ.ΠΌΠΎΠ΄ΡΠ»ΠΈ
, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΡΠΉ
ΠΌΠΎΠ΄ΡΠ»Ρ (-Ρ), ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΡΠ°ΠΌ Π·Π°Π³ΡΡΠ·ΠΈΠ» ΠΌΠΎΠ΄ΡΠ»Ρ (-Ρ)
ΡΠ²Π½ΠΎ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.5: DeprecationWarning
Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ exec_module ()
, Π½ΠΎ
create_module ()
- Π½Π΅Ρ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.6: ImportError
Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ exec_module ()
, Π½ΠΎ
create_module ()
- Π½Π΅Ρ.
5.4.2. Π‘ΡΠ±ΠΌΠΎΠ΄ΡΠ»ΠΈ
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, importlib
API),
ΠΈΠΌΠΏΠΎΡΡ
ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡΡ ΠΈΠ·
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ __import __ ()
) a
ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ spam
Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ foo
, ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠΏΠΎΡΡΠ°
spam.foo
, spam
Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π°ΡΡΠΈΠ±ΡΡ foo
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²ΡΠ·Π°Π½ ΠΊ
ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡΠ»Ρ.ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²:
ΡΠΏΠ°ΠΌ / __init__.py foo.py bar.py
ΠΈ spam / __ init__.py
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ:
ΠΈΠ· .foo import Foo ΠΈΠ· .bar import Bar
, Π·Π°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊ foo
ΠΈ bar
Π²
ΡΠΏΠ°ΠΌ
ΠΌΠΎΠ΄ΡΠ»Ρ:
>>> ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠ°ΠΌ >>> spam.foo <ΠΌΠΎΠ΄ΡΠ»Ρ 'spam.foo' ΠΈΠ· '/ tmp / imports / spam / foo.py '> >>> spam.bar <ΠΌΠΎΠ΄ΡΠ»Ρ 'spam.bar' ΠΈΠ· '/tmp/imports/spam/bar.py'>
Π£ΡΠΈΡΡΠ²Π°Ρ Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΈΠΌΠ΅Π½ Python, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, Π½ΠΎ
Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°. ΠΠ½Π²Π°ΡΠΈΠ°Π½Ρ
ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ sys.modules ['spam']
ΠΈ
sys.modules ['spam.foo']
(ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ°), ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ
Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΠΊΠ°ΠΊ Π°ΡΡΠΈΠ±ΡΡ foo
ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ.
5.4.3. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΠΌΠΏΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.
Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π³ΡΡΠ·ΠΊΠΎΠΉ.ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ
ΠΎΠ±ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Π¦Π΅Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ - ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ
ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ
ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠΊΠ°ΡΠ΅Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ. Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ
ΠΈΠΌΠΏΠΎΡΡΠ½ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎΠ³ΡΡΠ·ΠΊΠΈ,
ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π±Π΅Π· ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π½Π΅ΡΠ΅Ρ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ββΠΊΠ°ΠΊ Π°ΡΡΠΈΠ±ΡΡ __spec__
Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π‘ΠΌ. ModuleSpec
Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠΈ
ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ.
5.4.5. ΠΌΠΎΠ΄ΡΠ»Ρ .__ ΠΏΡΡΡ__
ΠΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ __path__
, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ.
ΠΡΡΠΈΠ±ΡΡ __path__
ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ° Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΠΎΠ².
ΠΠ½ΡΡΡΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ sys.path
,
Ρ.Π΅. ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ __path__
ΠΎΠ±ΡΡΠ½ΠΎ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½, ΡΠ΅ΠΌ
sys.path
.
__path__
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΈΠ· ΡΡΡΠΎΠΊ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ.
Π’Π΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΡΠΎ ΠΈ Π΄Π»Ρ sys.path
, ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌ
__path__
ΠΈ sys.path_hooks
(ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π½ΠΈΠΆΠ΅)
ΠΊΠΎΠ½ΡΡΠ»ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±Ρ
ΠΎΠ΄Π΅ ΠΏΠ°ΠΊΠ΅ΡΠ° __path__
.
__init__ ΠΏΠ°ΠΊΠ΅ΡΠ°.Π€Π°ΠΉΠ» py
ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ __path__
ΠΏΠ°ΠΊΠ΅ΡΠ°
Π°ΡΡΠΈΠ±ΡΡ, ΠΈ ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π±ΡΠ» ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
Π΄ΠΎ PEP 420 . Π‘ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ΠΌ PEP 420 ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π½Π΅
Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ __init__.py
ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ
ΡΠΎΠ»ΡΠΊΠΎ __path__
ΠΊΠΎΠ΄ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ; ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ __path__
ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
5.4.6. ΠΠΎΠ΄ΡΠ»Ρ reprs
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π²ΡΠ΅Ρ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΅ΡΡΡ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΠΉ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΏΠ΅Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ
Π°ΡΡΠΈΠ±ΡΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π²ΡΡΠ΅, Π° Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π½ΠΎ
ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΡΠ»ΠΈ Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ( __spec__
), ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ
ΡΡΠΎΠ±Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΠ΄Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π΅Ρ, ΠΈΠΌΠΏΠΎΡΡ
ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΠΏΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π»ΡΠ±ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
Π½Π° ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΠ½ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ .__ name__
,
module .__ file__
ΠΈ module .__ loader__
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π² repr,
ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΠΠΎΡ ΡΠΎΡΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°:
ΠΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ
__spec__
, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΏΡ.Β«ΠΠΌΡΒ», Β«Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΒ», Β«ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅Β» ΠΈ
ΠΠΎΠ½ΡΡΠ»ΡΡΠΈΡΡΡΡΡΡ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Β«has_locationΒ».ΠΡΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅Ρ Π°ΡΡΠΈΠ±ΡΡ
__file__
, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ
ΡΠ΅ΠΏΡ. ΠΌΠΎΠ΄ΡΠ»ΡΠΡΠ»ΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Π½Π΅Ρ
__file__
, Π½ΠΎ Π΅ΡΡΡ__loader__
, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅Ρ
ΠΠ΅Ρ
, ΡΠΎΠ³Π΄Π° repr Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ repr ΠΌΠΎΠ΄ΡΠ»Ρ.Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
__name__
ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΠ΅ΠΏΡ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ loader.module_repr ()
ΡΡΡΠ°ΡΠ΅Π», ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ΅
ΠΌΠ°ΡΠΈΠ½Ρ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅ΠΏΡ.
ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ Python 3.3 ΡΠ΅ΠΏΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄Π΅Ρ
Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π° Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ°
module_repr ()
ΠΌΠ΅ΡΠΎΠ΄, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½, ΠΏΡΠ΅ΠΆΠ΄Π΅
ΠΏΡΠΎΠ±ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΠ°ΡΠ΅Π».
5.4.7. ΠΠ½Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Python Π·Π°Π³ΡΡΠ·ΠΈΡ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ ΠΈΠ· ΡΠ°ΠΉΠ»Π° .pyc
, ΠΎΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ,
cache ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ .py
. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Python Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ
ΡΠΎΡ
ΡΠ°Π½ΡΡ ΠΌΠ΅ΡΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠ΅ΡΠ°, ΠΊΠΎΠ³Π΄Π°
ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ. ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΊΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡ
ΡΠ°Π½Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠ΅ΡΠ° Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ
ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅.
Python ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ»Ρ ΠΊΡΡΠ° Β«Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Ρ
ΡΡΠ°Β», Π² ΠΊΠΎΡΠΎΡΡΡ
Ρ
ΡΠ°Π½ΠΈΡΡΡ Ρ
ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π°, Π° Π½Π΅ Π΅Π³ΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅. ΠΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Ρ
Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
.Π€Π°ΠΉΠ»Ρ pyc
: ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ ΠΈ Π½Π΅ ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ. ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ
Ρ
Π΅Ρ-ΡΠ°ΠΉΠ»ΠΎΠ² .pyc
,
Python ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΊΠ΅ΡΠ°, Ρ
Π΅ΡΠΈΡΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Ρ
ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Ρ
Π΅Ρ Ρ Ρ
Π΅ΡΠ΅ΠΌ Π² ΡΠ°ΠΉΠ»Π΅ ΠΊΠ΅ΡΠ°. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ΅Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Ρ
Π΅ΡΠ°
ΡΠ°ΠΉΠ» ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, Python Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΉ
ΠΡΡ-ΡΠ°ΠΉΠ» Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Ρ
ΡΡΠ°. ΠΠ»Ρ Π½Π΅ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ
Ρ
Π΅Ρ-ΡΠ°ΠΉΠ»ΠΎΠ² .pyc
Python ΠΏΡΠΎΡΡΠΎ
ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΠΊΠ΅ΡΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΡΠ°ΠΉΠ»ΠΎΠ² .pyc Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Ρ
ΡΡΠ°
ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ --check-hash-based-pycs
ΡΠ»Π°Π³.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.7: ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ Ρ
Π΅Ρ-ΡΠ°ΠΉΠ»Ρ .pyc
. Π Π°Π½ΡΡΠ΅ Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π» ΡΠΎΠ»ΡΠΊΠΎ
Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠ΅ΡΠ΅ΠΉ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠΊ.
5.5. ΠΠΎΠΈΡΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ
ΠΠ°ΠΊ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅, Python ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ
, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΠΏΡΡΠΈ
( PathFinder
), ΠΈΡΠ΅Ρ ΠΏΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠ°,
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΡΠΈ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΡΡ
Π·Π°ΠΏΠΈΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π‘Π°ΠΌΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠ΅ΠΉ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΌΠ΅Π΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ.ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ, ΡΠ²ΡΠ·ΡΠ²Π°Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΈΠ· Π½ΠΈΡ
Ρ
ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΡΡ.
ΠΠ°Π±ΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ΅Π΄ΡΡΠ² ΠΏΠΎΠΈΡΠΊΠ° Π²Ρ
ΠΎΠ΄ΠΎΠ² ΠΏΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π²ΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°
ΠΌΠΎΠ΄ΡΠ»ΠΈ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Python
ΠΊΠΎΠ΄ ( ΡΠ°ΠΉΠ»ΠΎΠ² .py,
), Π±Π°ΠΉΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ Python ( ΡΠ°ΠΉΠ»ΠΎΠ² .pyc,
) ΠΈ
ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, .so
ΡΠ°ΠΉΠ»ΠΎΠ²). ΠΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ zipimport
ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠ΅ΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ
Π·Π°Π³ΡΡΠ·ΠΊΠ° Π²ΡΠ΅Ρ
ΡΡΠΈΡ
ΡΠΈΠΏΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΊΡΠΎΠΌΠ΅ ΠΎΠ±ΡΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ) ΠΈΠ· zip-ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π°
URL-Π°Π΄ΡΠ΅ΡΠ°, Π·Π°ΠΏΡΠΎΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠ°ΠΊ
Π½ΠΈΡΡ.
Π‘ΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠΈΠΊΠΈ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ, ΡΡΠΎΠ±Ρ Π²Ρ
ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠΈΠΏΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΡΠΈ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
Π΅ΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π²ΡΠ΅ URL-Π°Π΄ΡΠ΅ΡΠ°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π»ΠΎΠ²ΡΡΠΊΡ
ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ HTTP Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅. ΠΡΠΎΡ ΠΊΡΡΡΠΎΠΊ (Π°
callable) Π²Π΅ΡΠ½Π΅Ρ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»
ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ·
ΠΠ½ΡΠ΅ΡΠ½Π΅Ρ.
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π² ΡΡΠΎΠΌ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½ finder ,
ΡΠ°Π·Π»ΠΈΡΠ°Ρ ΠΈΡ
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ "ΠΏΠΎΠΈΡΠΊ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ" ΠΈ
ΠΏΠΎΠΈΡΠΊ ΠΏΡΡΠΈ Π²Ρ
ΠΎΠ΄Π°. ΠΡΠΈ Π΄Π²Π° ΡΠΈΠΏΠ° ΠΈΡΠΊΠ°ΡΠ΅Π»Π΅ΠΉ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ
ΠΎΠΆΠΈ,
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°
ΠΏΡΠΎΡΠ΅ΡΡ, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ.
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠΈ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΎΠ±Ρ
ΠΎΠ΄Π΅ sys.meta_path
.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠΎΠ³ΠΎ, ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π° Π² ΠΏΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΡΠ°Π»ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΈΡΠΊΠ°ΡΠ΅Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ, ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π΅ΡΠ»ΠΈ Π±Ρ ΠΈΡΠΊΠ°ΡΠ΅Π»Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ Π±ΡΠ»
ΡΠ΄Π°Π»Π΅Π½ΠΎ ΠΈΠ· sys.meta_path
, Π½Π΅Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½.
5.5.1. ΠΠΎΠΈΡΠΊ ΠΏΡΡΠ΅ΠΉ
ΠΡΠΊΠ°ΡΠ΅Π»Ρ ΠΏΡΡΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠΎΠΈΡΠΊ ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΡ
ΠΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Python, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ
ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΡΡΠΎΠΊΠΎΠΉ
Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΡΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅,
Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΡΡΠΈΠΌ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ
find_spec ()
ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠ°Π½Π΅Π΅
ΠΎΠΏΠΈΡΠ°Π½, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΡΡΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ
Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ· ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°.
ΠΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΏΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: sys.path
,
sys.path_hooks
ΠΈ sys.path_importer_cache
. __path__
ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ
ΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡΠ½Π°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π°.
sys.path
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ
ΠΏΠΎΠΈΡΠΊ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ
ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ. ΠΠ½ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΈΠ· PYTHONPATH
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Ρ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π·Π°Π²ΠΈΡΡΡΠΈΠ΅ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΏΠΈΡΠΈ Π² sys.path
ΠΌΠΎΠ³ΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, zip-ΡΠ°ΠΉΠ»Ρ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΡΡΠ³ΠΈΠ΅ Β«ΠΌΠ΅ΡΡΠ°Β»
(ΡΠΌ. ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΠΉΡΠ°
), Π² ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΊΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
URL-Π°Π΄ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
. ΠΠ° Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊΠΈ ΠΈ Π±Π°ΠΉΡΡ.
ΡΠΈΡΡΠ΅ΠΌ.ΠΏΡΡΡ
; Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ. ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° Π±Π°ΠΉΡΠΎΠ²
Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ°ΠΌΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΏΡΡΠ΅ΠΉ.
Π‘ΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ - ΡΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅ΡΠ° ΠΏΡΡΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠΌΠΏΠΎΡΡ
ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΠΎΠΈΡΠΊ ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΡΠΈ
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠΎΠΈΡΠΊΠ° find_spec ()
ΠΊΠ°ΠΊ
ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΠ°Π½Π΅Π΅. ΠΠΎΠ³Π΄Π° ΠΏΡΡΡ
Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊ
find_spec ()
Π΄Π°Π½ΠΎ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ
ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ
ΠΏΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΠ±Ρ
ΠΎΠ΄Π° - ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ __path__
Π°ΡΡΠΈΠ±ΡΡ Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° Π² ΡΡΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅.ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ path
ΡΠ°Π²Π΅Π½
ΠΠ΅Ρ
, ΡΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΈΠΌΠΏΠΎΡΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ sys.path
.
Π‘ΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡ Π² ΠΏΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ°, ΠΈ
Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ
ΠΈΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠΎΠΈΡΠΊ ΠΏΡΡΠ΅ΠΉ Π²Ρ
ΠΎΠ΄Π°
( PathEntryFinder
) Π΄Π»Ρ
Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ
stat () Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ
ΡΠ°ΡΡ
ΠΎΠ΄ΠΎΠ² Π½Π° Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°), ΠΏΠΎΠΈΡΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ
Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΡΠ° ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΡΠΈ.ΠΡΠΎΡ ΠΊΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ
Π² sys.path_importer_cache
(Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΡΡΠΎΡ ΠΊΠ΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅
Ρ
ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠΈΡΠΊΠ°, Π° Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ-ΠΈΠΌΠΏΠΎΡΡΠ΅ΡΠ°ΠΌΠΈ).
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠΈΠΉ ΠΏΠΎΠΈΡΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ
ΠΏΠΎΠΈΡΠΊ ΠΏΡΡΠΈ ΠΊ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠΎΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΊΠ΅ΡΠ° ΠΈΠ· sys.path_importer_cache
ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ
ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ, ΡΡΠΎΠ±Ρ ΡΠ½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΈΡΠΊ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ.
ΠΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΊΡΡΠ΅, ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ
ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΌΡ Π² sys.path_hooks
. ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ
Ρ
ΡΠΊΠΈ Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ,
Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΏΡΡΡ
ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ
ImportError
. ImportError
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ Π΄Π»Ρ
ΡΠΈΠ³Π½Π°Π» ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π»ΠΎΠ²ΡΡΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠΈ
Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ. Π
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΡΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ. ΠΡΡΠΊ
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π»ΠΈΠ±ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ, Π»ΠΈΠ±ΠΎ Π±Π°ΠΉΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ; ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°ΠΉΡΠΎΠ²ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
Π΄ΠΎ ΠΊΡΡΡΠΊΠ° (e.Π³ΡΠ°ΠΌΠΌ. ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, UTF-8 ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅
else), ΠΈ Π΅ΡΠ»ΠΈ Π»ΠΎΠ²ΡΡΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π½ΡΡΡ
ImportError
.
ΠΡΠ»ΠΈ sys.path_hooks
ΠΈΡΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π±Π΅Π· ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ, ΡΠΎ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΡΠΈ
find_spec ()
ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΡ
ΡΠ°Π½ΠΈΡ None
Π² sys.path_importer_cache
(ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π½Π΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ
ΡΡΠ° Π·Π°ΠΏΠΈΡΡ ΠΏΡΡΠΈ) ΠΈ Π²Π΅ΡΠ½ΡΡΡ None
, ΡΠΊΠ°Π·ΡΠ²Π°Ρ, ΡΡΠΎ ΡΡΠΎ
ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΡ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π½Π°ΠΉΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ.
ΠΡΠ»ΠΈ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ - ΡΡΠΎ , Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΡΡΠΈ
ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠΈΡΡ callables Π½Π° sys.path_hooks
, ΡΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»
ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΠΎΡΠΈΡΡ Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅
ΠΌΠΎΠ΄ΡΠ»Ρ.
Π’Π΅ΠΊΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ - ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ - ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ
Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ
Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π° sys.path
. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, Π΅ΡΠ»ΠΈ
ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π²
ΡΠΈΡΡΠ΅ΠΌ.path_importer_cache
. ΠΠΎ-Π²ΡΠΎΡΡΡ
, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ²Π΅ΠΆΠΈΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Ρ. Π-ΡΡΠ΅ΡΡΠΈΡ
, ΠΏΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ
sys.path_importer_cache
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ
importlib.machinery.PathFinder.find_spec ()
Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΠΊΡΡΠΈΠΌ
ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π° Π½Π΅ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°.
5.5.2. ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΏΠΎΠΈΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΡΡ
ΠΠ»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ
Π²Π½ΠΎΡΠΈΡΡ ΡΠ°ΡΡΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ find_spec ()
.
find_spec ()
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) ΡΠ΅Π»Ρ
ΠΌΠΎΠ΄ΡΠ»Ρ. find_spec ()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π ΡΡΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Β«Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΒ» (Π·Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ).
Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΈΠΌΠΏΠΎΡΡΠ°, ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½
ΡΠ°ΡΡΡ, ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Β«submodule_search_locationsΒ» ΡΠ°Π²Π½ΡΠΌ
ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ°ΡΡΡ.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 3.4: find_spec ()
Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ
find_loader ()
ΠΈ
find_module ()
, ΠΎΠ±Π° ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΠ°ΡΠ΅Π»ΠΈ, Π½ΠΎ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ find_spec ()
Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ.
Π‘ΡΠ°ΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠ΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ° ΠΌΠΎΠ³ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΈΡ
Π΄Π²ΡΡ
ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
Π²ΠΌΠ΅ΡΡΠΎ find_spec ()
. ΠΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ
ΡΠ°Π΄ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ find_spec ()
- ΡΡΠΎ
ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ, ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΡΡΡΡΡ.
find_loader ()
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ,
ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. find_loader ()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 2-ΠΊΠΎΡΡΠ΅ΠΆ, Π³Π΄Π΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ, Π° Π²ΡΠΎΡΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½.
ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΈΠΌΠΏΠΎΡΡΠ°
ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° Π²Ρ
ΠΎΠ΄ΠΎΠ² ΠΏΡΡΠΈ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅,
ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ find_module ()
, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ°ΠΌΠΈ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΡΡΠΈ find_module ()
Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ.
Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ path
(ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ
ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΡΠΈ ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΊ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠΈΠΊΡ ΠΏΡΡΠΈ).
ΠΠ΅ΡΠΎΠ΄ find_module ()
Π² ΡΡΠ΅Π΄ΡΡΠ²Π°Ρ
ΠΏΠΎΠΈΡΠΊΠ° Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ ΡΡΡΠ°ΡΠ΅Π»,
ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΡ Π²Ρ
ΠΎΠ΄Π° ΠΏΡΡΠΈ Π²Π½ΠΎΡΠΈΡΡ ΡΠ°ΡΡΠΈ Π²
ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½. ΠΡΠ»ΠΈ ΠΈ find_loader ()
, ΠΈ find_module ()
ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΡΠΈ, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠΌΠΏΠΎΡΡΠ° Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ
find_loader ()
Π²ΠΌΠ΅ΡΡΠΎ find_module ()
.
5,6. ΠΠ°ΠΌΠ΅Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°
Π‘Π°ΠΌΡΠΉ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π·Π°ΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ° - ΡΡΠΎ
ΡΠ΄Π°Π»ΠΈΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ sys.meta_path
, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ
ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΡΠΈΠΊΠΎΠΌ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ.
ΠΡΠ»ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈΠΌΠΏΠΎΡΡΠ°
Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ Π΄ΡΡΠ³ΠΈΠ΅ API, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ°, Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΠ²
Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ __import __ ()
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΡΠ° ΡΠ΅Ρ
Π½ΠΈΠΊΠ°
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΠΌΠΏΠΎΡΡΠ° Π² ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.
ΠΠ»Ρ Π²ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈΠ· ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠ° Π½Π° ΡΠ°Π½Π½Π΅ΠΉ ΡΡΠ°Π΄ΠΈΠΈ
ΠΌΠ΅ΡΠ°-ΠΏΡΡΡ (Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°),
Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ ModuleNotFoundError
ΠΏΡΡΠΌΠΎ ΠΈΠ·
find_spec ()
Π²ΠΌΠ΅ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°
ΠΠ΅Ρ
.ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊ ΠΌΠ΅ΡΠ°-ΠΏΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡΡΡ,
ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ½ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΡΡΡ.
5,7. ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²
ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ. ΠΠ΄ΠΈΠ½ΠΎΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π² Π½Π°ΡΠ°Π»Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ
import, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠ²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Π΅Π΄ΡΡΠΈΡ
ΡΠΎΡΠ΅ΠΊ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡ
ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ ΠΊ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ (Π°ΠΌ) ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ²Π΅Π½Ρ Π½Π° ΡΠΎΡΠΊΡ
ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΌΠ°ΠΊΠ΅ΡΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ:
ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° / __Π² ΡΡΠΎΠΌ__.ΡΡ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ1 / __init__.py moduleX.py moduleY.py ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ2 / __init__.py moduleZ.py moduleA.py
Π ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΠ΅ 1 / moduleX.py
ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΠ°ΠΊΠ΅ΡΠ΅1 / __ init__.py
,
ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡ:
ΠΈΠ· .moduleY ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠ°ΠΌ ΠΈΠ· .moduleY ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠ°ΠΌ ΠΊΠ°ΠΊ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈΠ· . ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠΏΠΎΡΡΠ°Y from ..subpackage1 import moduleY from ..subpackage2.moduleZ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΉΡΠ° from ..moduleA import foo
ΠΠ±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ import <>
, Π»ΠΈΠ±ΠΎ ΠΈΠ· <> import <>
ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, Π½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠΎΡΡΡ ΡΠΎΡΠΌΡ; ΠΏΡΠΈΡΠΈΠ½Π°
Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎ:
Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΡΡΠ°Π²ΠΈΡΡ XXX.YYY.ZZZ
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ .moduleY
Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
5,8. ΠΡΠΎΠ±ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π΄Π»Ρ __main__
ΠΠΎΠ΄ΡΠ»Ρ __main__
- ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΈΠΌΠΏΠΎΡΡΠΎΠΌ Python.
ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, ΠΌΠΎΠ΄ΡΠ»Ρ __main__
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, ΠΊΠ°ΠΊ sys
ΠΈ
Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠΈΡ
Π΄Π²ΡΡ
, ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ
ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΡΡΡΡΡ ΠΊΠ°ΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±, ΠΊΠΎΡΠΎΡΡΠΌ
__main__
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ»Π°Π³ΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ
ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ.
5.8.1. __ΠΌΠ°ΡΠΈΠ½Π° __.__ spec__
Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ __main__
, __main __.__ spec__
ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π° ΠΠ΅Ρ
.
ΠΠΎΠ³Π΄Π° Python Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ -m
, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ __spec__
ΠΊ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°. __spec__
- ΡΡΠΎ
ΡΠ°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡΠ»Ρ __main__
Π·Π°Π³ΡΡΠΆΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³, zip-ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ sys.ΠΏΡΡΡ
Π·Π°ΠΏΠΈΡΡ.
Π ΠΎΡΡΠ°Π»ΡΠ½ΡΡ
ΡΠ»ΡΡΠ°ΡΡ
__main __.__ spec__
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π½Π° None
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
__main__
Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ __main __.__ spec__
Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ None
Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅,
, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ» ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ Π½Π°ΠΏΡΡΠΌΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ
Π²ΠΌΠ΅ΡΡΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Ρ -m
, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΡΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ.
Π² __main__
.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ __main__
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ
ΠΈ __main __.__ spec__
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΠ½ΠΈ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΡΠΈΡΠ°ΡΡΡΡ
ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈ ΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ
if __name__ == "__main__":
ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ
Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ __main__
, Π° Π½Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠΎΡΡΠ°.
5,9. ΠΡΠΊΡΡΡΡΠ΅ Π²ΡΠΏΡΡΠΊΠΈ
XXX ΠΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΡ Π΅ΠΌΡ.
XXX * (import_machinery.rst) ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»Π°, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ
Π°ΡΡΠΈΠ±ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΡΡΠΈΡΡΡΡΠΈΠ΅ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠ΅
ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π½Π° ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ
?
XXX runpy, pkgutil ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Β«Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅Β»
ΡΡΡΠ»ΠΊΠΈ Π²Π²Π΅ΡΡ
Ρ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅ Π½Π° ΡΠ°Π·Π΄Π΅Π» Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠ°.
XXX ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΌΠΈ
__main__
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½?
XXX ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ __main__
ΠΏΡΠΈΡΡΠ΄Π°Ρ
/ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΡ
ΠΊΠ°ΠΌΠ½ΡΡ
(Ρ.Π΅. ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·
PEP 395 ).
5.10. Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠΏΠΎΡΡΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ Ρ ΠΏΠ΅ΡΠ²ΡΡ
Π΄Π½Π΅ΠΉ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Python. Π
ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π²ΡΠ΅ Π΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ,
Ρ
ΠΎΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
ΠΡΡ
ΠΎΠ΄Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π»Ρ sys.meta_path
Π±ΡΠ»Π° PEP 302 , Ρ
ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ Π² PEP 420 .
PEP 420 ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Π΄Π»Ρ
Python 3.3. PEP 420 ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» ΠΏΡΠΎΡΠΎΠΊΠΎΠ» find_loader ()
ΠΊΠ°ΠΊ
Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° find_module ()
.
PEP 366 ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° __package__
Π΄Π»Ρ
ΡΠ²Π½ΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»ΡΡ
.
PEP 328 Π²Π²Π΅Π» Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΈ ΡΠ²Π½ΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ
ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ __name__
Π΄Π»Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ PEP 366 Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΄Π»Ρ
__ΠΏΠ°ΠΊΠ΅Ρ__
.