每当我使用时sys.path.append,都会添加新目录.但是,一旦我关闭python,列表将恢复到之前的(默认?)值.如何永久添加目录PYTHONPATH?
我见过很少的py脚本在脚本的顶部使用它.在什么情况下应该使用它?
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
Run Code Online (Sandbox Code Playgroud) 我正在使用python来分析一些大文件,而且我遇到了内存问题,所以我一直在使用sys.getsizeof()来尝试跟踪使用情况,但是numpy数组的行为很奇怪.这是一个涉及我必须打开的反照率地图的例子:
>>> import numpy as np
>>> import struct
>>> from sys import getsizeof
>>> f = open('Albedo_map.assoc', 'rb')
>>> getsizeof(f)
144
>>> albedo = struct.unpack('%df' % (7200*3600), f.read(7200*3600*4))
>>> getsizeof(albedo)
207360056
>>> albedo = np.array(albedo).reshape(3600,7200)
>>> getsizeof(albedo)
80
Run Code Online (Sandbox Code Playgroud)
那么数据仍然存在,但是对象的大小,一个3600x7200像素的映射,从大约200 Mb变为80字节.我希望我的记忆问题已经结束,只是将所有内容转换为numpy数组,但我觉得这种行为,如果是真的,会在某种程度上违反信息理论或热力学的某些定律,或者其他什么,所以我是倾向于认为getsizeof()不适用于numpy数组.有任何想法吗?
Python的sys.path在哪里初始化?
UPD:Python在引用PYTHONPATH之前添加了一些路径:
>>> import sys
>>> from pprint import pprint as p
>>> p(sys.path)
['',
'C:\\Python25\\lib\\site-packages\\setuptools-0.6c9-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\orbited-0.7.8-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\morbid-0.8.6.1-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\demjson-1.4-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\stomper-0.2.2-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\uuid-1.30-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\stompservice-0.1.0-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\cherrypy-3.0.1-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\pyorbited-0.2.2-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\flup-1.0.1-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\wsgilog-0.1-py2.5.egg',
'c:\\testdir',
'C:\\Windows\\system32\\python25.zip',
'C:\\Python25\\DLLs',
'C:\\Python25\\lib',
'C:\\Python25\\lib\\plat-win',
'C:\\Python25\\lib\\lib-tk',
'C:\\Python25',
'C:\\Python25\\lib\\site-packages',
'C:\\Python25\\lib\\site-packages\\PIL',
'C:\\Python25\\lib\\site-packages\\win32',
'C:\\Python25\\lib\\site-packages\\win32\\lib',
'C:\\Python25\\lib\\site-packages\\Pythonwin']
Run Code Online (Sandbox Code Playgroud)
我的PYTHONPATH是:
PYTHONPATH=c:\testdir
Run Code Online (Sandbox Code Playgroud)
我想知道PYTHONPATH之前的那些路径来自哪里?
假设有一个脚本做这样的事情:
# module writer.py
import sys
def write():
sys.stdout.write("foobar")
Run Code Online (Sandbox Code Playgroud)
现在假设我想捕获write函数的输出并将其存储在变量中以供进一步处理.天真的解决方案是:
# module mymodule.py
from writer import write
out = write()
print out.upper()
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我想出了另一个解决方案并且它有效,但是请告诉我是否有更好的方法来解决问题.谢谢
import sys
from cStringIO import StringIO
# setup the environment
backup = sys.stdout
# ####
sys.stdout = StringIO() # capture output
write()
out = sys.stdout.getvalue() # release output
# ####
sys.stdout.close() # close the stream
sys.stdout = backup # restore original stdout
print out.upper() # post processing
Run Code Online (Sandbox Code Playgroud) 在什么情况下我想用一个而不是另一个?
有什么区别:
>>> import inspect
>>> print(inspect.getouterframes(inspect.currentframe()))
[(<frame object at 0x8fc262c>, '<stdin>', 1, '<module>', None, None)]
Run Code Online (Sandbox Code Playgroud)
和:
>>> import traceback
>>> traceback.extract_stack()
[('<stdin>', 1, '<module>', None)]
Run Code Online (Sandbox Code Playgroud)
更新:
另一个:
>>> import sys
>>> print(sys._getframe().f_trace,sys._getframe().f_code)
(None, <code object <module> at 0x8682a88, file "<stdin>", line 1>)
Run Code Online (Sandbox Code Playgroud)
我不明白这里的细微差别:
更新2,问题问题后的一段时间,但非常相关
我想从Python脚本中获取当前目录的父级.例如,我/home/kristina/desire-directory/scripts在这种情况下从欲望路径启动脚本/home/kristina/desire-directory
我知道sys.path[0]从sys.但我不想解析sys.path[0]结果字符串.有没有其他方法可以在Python中获取当前目录的父级?
Python使用PYTHONPATH环境变量来确定它应该在哪些文件夹中查找模块.您可以通过修改来解决它sys.path,它可以很好地用于纯Python模块.但是当一个模块使用共享对象文件或静态库时,它会在LD_LIBRARY_PATH(在linux上)查找它们,但是根据我所知,这不能轻易改变并且是平台相关的.
这个问题的快速修复当然是设置环境变量或调用脚本LD_LIBRARY_PATH=. ./script.py,但是你必须为你打开的每个新shell再次设置它.此外,.so我的情况下的文件将始终与文件位于同一目录中.py,但很可能会移动到另一个绝对路径,所以我想每次调用脚本时自动设置它们.
如何编辑Python解释器在运行时独立查找库平台的路径?
我已经尝试过os.environ['LD_LIBRARY_PATH'] = os.getcwd(),但无济于事.
我有一段代码在Linux中运行,我现在正试图在Windows中运行它,我导入sys但是当我使用sys.exit()时.我收到一个错误,sys没有定义.这是我的代码的开头部分
try:
import numpy as np
import pyfits as pf
import scipy.ndimage as nd
import pylab as pl
import os
import heapq
import sys
from scipy.optimize import leastsq
except ImportError:
print "Error: missing one of the libraries (numpy, pyfits, scipy, matplotlib)"
sys.exit()
Run Code Online (Sandbox Code Playgroud)
为什么sys不工作?