을, 이것은 당신이 무엇을 할 수 있습니다 : 세션을 시작
- 는
sys.path
sys.modules
의 상태를 저장 , 그리고 전역.
- 어떤 일이 발생하더라도 이러한 효과가있을 것입니다.
- 세션을 중지하면 이전에 시작된 세션의 상태가 복원됩니다.
참고 :이 내용은 완벽하지 않으므로 권장하지 않습니다. from sympy import *
대신에 import sympy
으로 무엇이 잘못되었는지 실제로 알 수 없습니다.
편집 :
이 접근을 가진 글로벌 범위를 수정하면, 예를 들어이보기 ... 쉽지 않고 많은 문제에서 당신을 얻을 것이다 보인다
class Session(object):
def __init__(self, gref):
self.init()
self.gref = gref
def init(self):
self.modules = {}
self.path = None
self.glob = {}
def start(self):
import sys
self.modules = sys.modules.copy()
self.path = sys.path[:]
self.glob = self.gref.copy()
self.gref['test'] = 'abc'
def stop(self):
import sys
sys.modules = self.modules.copy()
sys.path = self.path[:]
for k in self.gref.keys():
del self.gref[k]
self.gref.update(self.glob)
def __repr__(self):
return repr(self.glob)
을 실행 :
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sessionpy import Session
>>> s = Session(globals())
>>> before = 123
>>> s.start()
>>> after = 456
>>> s.stop()
>>> after
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'after' is not defined
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/apport_python_hook.py", line 66, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python2.7/dist-packages/apport/__init__.py", line 1, in <module>
from apport.report import Report
File "/usr/lib/python2.7/dist-packages/apport/report.py", line 18, in <module>
import problem_report
File "/usr/lib/python2.7/dist-packages/problem_report.py", line 15, in <module>
from email.encoders import encode_base64
File "/usr/lib/python2.7/email/__init__.py", line 115, in <module>
setattr(sys.modules['email'], _name, importer)
KeyError: 'email'
Original exception was:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'after' is not defined
>>> before
123
>>>
당신은 (after
이 NameError
을 제기으로) 작동 볼 수 있지만, 거기에 수 sys.excepthook
에있는 일부 모듈에서 발생하는 다른 문제. sympy
및 numpy
과 같이 2 개의 거대한 라이브러리에서 발생하는 문제 만 상상할 수 있습니다.
참고 : 당신은 단지 전역에, 당신이 할 수있는 단지 혼란, 간단한 일이 실행을 원하는 당신은 종류의 확인을 할 수 있습니다합니다.
이 '세션'은 정확히 무엇입니까? – jadkik94
왜 이것을하고 싶습니까? –
@ jadkik94'Session'은 ** ** 질문입니다! 그러나 보시다시피,'Session.Start'는 세션을 격리 시키므로 다른 패키지의 유사한 객체들 사이에는 충돌이 없습니다. – Developer