Как отметил Грег, есть очень веская причина, по которой -i
ведет себя так, как он.Тем не менее, я считаю весьма полезным иметь возможность загружать мой PYTHONSTARTUP
, когда я хочу интерактивный сеанс.Итак, вот код, который я использую, когда я хочу, чтобы PYTHONSTARTUP
был активным в скрипте, запущенном с -i
.
if __name__ == '__main__':
#do normal stuff
#and at the end of the file:
import sys
if sys.flags.interactive==1:
import os
myPythonPath = os.environ['PYTHONSTARTUP'].split(os.sep)
sys.path.append(os.sep.join(myPythonPath[:-1]))
pythonrcName = ''.join(myPythonPath[-1].split('.')[:-1]) #the filename minus the trailing extension, if the extension exists
pythonrc = __import__(pythonrcName)
for attr in dir(pythonrc):
__builtins__.__dict__[attr] = getattr(pythonrc, attr)
sys.path.remove(os.sep.join(myPythonPath[:-1]))
del sys, os, pythonrc
Обратите внимание, что это довольно хакерский и я никогда сделайте это, не убедившись, что мой pythonrc не случайно забивает переменные и встроенные функции.