文章标题

来源:互联网 发布:ubuntu更换源 编辑:程序博客网 时间:2024/05/29 02:05

Using&Python&with&VAPOR
February 2013 update
Introduction:
VAPOR&Version&2.2 includes&support&for&using&Python (version&2.7),&with the&
Numerical&Python&module&(NumPy version&1.6)&and&SciPy version&0.10,&to&define&
derived&variables&in&VAPOR.&&New&variables&can&be&defined&as&the&result&of&applying&
a&python&script&to&other&variables,&and&these&new&variables&are&automatically&
calculated&as&needed&during&the visualization&session.&
Basic+usage:
New&variables&can&be&defined&as&the&result&of&an&arrayKbased&operation.&&A&
mathematical&formula&can&be&applied&to&existing&variables&to&define&new&variables.&&
For&example,&suppose&U&and&V&are&3D&variables&in&a&Vapor&Data&Collection&(VDC).&&U&
and&V&are&represented&in&VAPOR&as&collections&of&3D&data&arrays,&one&array&for&each&
time&step.&You&can&define&a&new&3D&variable&“NewVar”&with&the&oneKline&Python&
script:
NewVar&=&2.5*U&+10*U*V
Thereafter&the&variable&“NewVar”&can&be&used&as&a&3D&variable&in&any&3D&VAPOR&
visualization.&&Its&value&at&a&point&(x,y,z)&in&the&VAPOR&scene,&and&at&a&time&step&t,&will&
be&determined&by&applying&the&above&formula&to&the&corresponding&point&of&the&U&
and&V&arrays&for&the&same&time&step&t.&&You&can&also&calculate&a&variable&by&operating&
on&input&data&arrays&elementKbyKelement;&this&is&discussed&below&under&“Advanced&
Usage”.
Vapor’s&data&caching&and&region&selection&mechanisms&are&applicable,&so&that&
NewVar&will&only&be&reKcalculated&as&needed.
To&define&a&new&variable&that&is&derived&from&other&variables,&do&the&following:
1. From&the&vaporgui&Edit&menu,&select&&“Edit&Python&program&defining&a&new&
variable”.&&This&will&launch&the&VAPOR&Python&editor.
2. From&the&VAPOR&Python&editor,&check&the&existing&variables&that&will&be&used&
as&input&to&the&script,&using&the&checkboxes&at&the&top&of&the&editor&window.&&
In&the&above&example,&you&would&check&“U”&and&“V”&as&Input&3D&Variables.
3. Specify&the&name(s)&of&output&variables&calculated&by&your&script,&using&the&
“Add&3D&Variable”&or&“Add&2D&Variable”&pushbuttons&in&the&editor&window.&&
In&the&above&example,&“NewVar”&would&be&specified&as&an&Output&3D&variable.
4. Type&the&formula&(or&Python&program)&that&calculates&your&output&
variable(s)&into&the&center&Python&editor&window.&&You&can&also&copy&and&
paste&it&from&another&text&editor.
5. Optionally,&click&on&the&“Test”&button&at&the&bottom&of&the&editor&window.&&
This&will&check&that&your&program&is&valid&by&applying&it&at&the&current&region&
and&time&step,&at&lowest&refinement&level,&and&will&print&any&output&text&or&
error&messages&in&a&VAPOR&popup.
6. Click&on&the&“Apply”&button&to&finalize&the&program,&defining&the&new&
variable.&&Henceforth&the&newly&defined&variable(s)&will&appear&in&the&various&
variable&lists&for&rendering.
It&is&a&good&idea&to&save&your&session&after&you&click&“Apply”.&&That&way&the&derived&
variables&and&the&Python&scripts&you&have&defined&will&be&available&the&next&time&you&
load&the&session.
Pre3defined+Python+functions
VAPOR&provides&several&Python&functions&that&are&available&from&the&VAPOR&
environment.&&General&functions&are&in&the&module&“vapor_utils”.&&WRFKspecific&
modules&are&in&the&module&“vapor_wrf”.&&You&can&access&these&functions&by&issuing&
“import&vapor_utils”&and&“import&vapor_wrf”&in&your&python&shell.
Help&is&available&in&the&vapor&python&editor.&&To&obtain&help&on&method&named&
“method_name”&in&module&“module_name”,&type&the&following&into&the&python&
editor:&
import module_name
help (module_name.method_name)
Then&click&the&“Test” button.
On Macintosh&the&python&methods&are installed&in&
Vapor.app/Contents/SharedSupport/python.&&&On&Windows&or&Linux&these&are&
installed&in&(VAPOR_HOME)/share/python&.&&You&may&also&find&these&scripts&useful&  
examples&of&how&to&write&Python&scripts&operating&on&VAPOR&data.  
The vapor_utils module&includes:  
vapor_utils.mag3d(a1,a2,a3) :&return&the&3D&magnitude&of&(a1,a2,a3)  
vapor_utils.mag2d(a1,a2) :&return&the&2D&magnitude&of&(a1,a2)  
vapor_utils.curl_findiff(inx,+iny,+inz,+order=6): returns (a&tuple&of)&3&NumPy&  
arrays&corresponding&with&the&three&components&of&the&curl&of&the&vector&field&  
(inx,iny,inz).& The&curl&is&performed&in&VAPOR&user&coordinates,&so&that&the&results&  
may&be&used&in&the&current&VAPOR&visualization.&&Order&can&be&6,&4,&or&2.  
vapor_utils.grad_findiff(var,order=6): returns (a&tuple&of)&3&NumPy&arrays&  
corresponding with&the&three&components&of&the&gradient of&the&variable&var. The&  
gradient&is&performed&in&VAPOR&user&coordinates,&so&that&the&results&may&be&used&in&  
the&current&VAPOR&visualization.&&Order&can&be&6,&4,&or&2.  
vapor_utils.div_findiff(inx,iny,inz,order=6): returns a&NumPy&array which&is&the&  
divergence&of the&vector&field&defined&by&[inx,&iny,&inz]. The&divergence&is&performed&  
in&VAPOR&user&coordinates,&so&that&the&results&may&be&used&in&the&current&VAPOR&  
visualization.&&The&order&can&be&2,4,or&6(default).  
vapor_utils.deriv_findiff(a,dir,dx,order=6): return&the&finiteKdifference&(sixth&  
order)&derivative&of&the&NumPy&float32&array&a,&in&the&direction&dir,&with&a&spatial&  
step&of&dx.&&&The&value&of&dir&is&1,2,&or&3,&which&are&associated&with&the&1st,&2nd,&and&3rd  
dimensions&of&the&NumPy&array,&and&which correspond&to&the&Z,&Y,&and&X dimensions&  
in&the&VAPOR&VDC.&&The&floating&point&value&dx&is&the&stepKsize&in&user&coordinates&  
associated&with&grid&size&in&the&dimension&associated&with&dir. The&order&can&be&  
either&6,&4,&or&2.  
vapor_utils.deriv_var_findiff(a,var,dir,order=6): return&the&finiteKdifference&  
(sixth&order)&derivative&of&the&NumPy&float32&array&a,&with&respect&to&the&variable&  
“var”.&&&The&value&of&dir&is&1,2,&or&3,&which&are&associated&with&the&1st,&2nd,&and&3rd  
dimensions&of&the&NumPy&array,&and&which correspond&to&the&Z,&Y,&and&X dimensions&  
in&the&VAPOR&VDC.&&The&order&can&be&either&6,&4,&or&2.  
vapor_utils.interp3d(A,PR,val): returns&a&2D&horizontal&variable,&obtained&by&  
interpolating&the&3D&variable&A&to&the&level&determined&by&PR=val,&where&PR&  
(typically&pressure)&is&a&3D&variable&that&decreases&with&increased&elevation&(z)&and&  
val&is&a&scalar.  
vapor_utils.vector_rotate(angleRad,+latDeg,+u,+v):&returns&a&2Ktuple&of&variables&  
obtained&by&rotating&the&u&and&v&variables&to&a&vector&field&on&a&latitude/longitude&  
grid.&&The&variable&angleRad&specifies&the&angle&rotation&in&radians&to&convert&from&  
the&u,v&grid&to&the&lat/lon&grid.&&The&latDeg&variable&indicates&the&latitude&in&degrees.&  
This&is&useful&for performing&flow&integration&on&the&vapor&latKlon&grid,&with&ROMS,&  
MOM,&POP,&and&other&models&that&are&reinterpolated&to&a&latKlon&grid&for&  
visualization.&&The&horizontal&components&of&the&flow&must&be&rotated&and&scaled&for&  
correct&flow&integration&on&the latKlon&grid.  
VAPOR&user&preference&settings&include&a&“Python&directory”,&where&users&can&save&  
the&python&scripts&they&are&using.&&By&default,&on&Linux&the&Python&directory&is&the&  
current&directory.&&On&Mac&and&Windows&it&defaults&to&the&user’s&home&directory&  
(the&value&of&the&HOME&environment&variable).  
Users&may&also&provide&a Python&startup&script&for&defining&methods,&variables&and&  
other&settings&to&be&used&in&a&particular&session.&&From&the&Edit&menu,&select&“Edit&  
Python&startup&script”.&&Click&“Test”&to&ensure&the&script&works&in&the&VAPOR&  
environment.&&After you&click&“Apply”,&this&script&will&be&executed&once,&prior&to&any&  
other&scripts.&&The&startup&script&will&be&saved&in&the&session&file&when&you&save&the&  
session,&and&will&be&restored&when&you&restore&a&session.  
When&VAPOR&is&installed,&a&Python&system&startup&script,&named&&  
“pythonSystemStartup.py”,&is&installed&in&the&directory&
(VAPOR_HOME)/share/python&.&&The&system&startup&script&is&executed&prior&to&any&
other&python&commands,&and&is&present&in&all&VAPOR sessions.&&By&default,&this&script&
contains&only&the&two&lines:
from numpy import *
from vapor_utils import *
The+vapor_wrf+module
Note:&&This&module&has&been&extensively&updated&for&vapor&2.2.&&Previous&to&VAPOR&
2.2,&python&methods&operated&in&the&user coordinate&grid,&which&was&reinterpolated&
from&the&WRF&terrainKfollowing&grid.&With&VAPOR&2.2,&the&python&methods&operated&
directly&on&arrays&defined&on&the&WRF&grid.&&This&results&in&more&accurate&
calculation,&however&modifications&whenever&using&derivative&operators&to&take&into&
account&the&grid&layering.&&New&methods&are&provided&in&this&module&to&support&
derivative&operators.&
Several&methods&that&are&commonly&used&in&analysis&of&WRFKARW&output&are&
installed&with&vapor,&in&the&vapor_wrf&module.&&To&use&these&you&should&include&the&
statement&“import&vapor_wrf”&at&the&start&of&your&script.&These&operate&on&the&
standard&WRF&output&variables.&&&They&have&been&adapted&from&RIP4&and&NCL&
FORTRANKbased&utilities.&&Included&are:
vapor_wrf.CTT(P,PB,T,QCLOUD,QICE) :&(2D)&cloudKtop&temperature
vapor_wrf.DBZ(P,PB,QRAIN,QGRAUP,QSNOW,T,QVAPOR,iliqskin,ivarint):&
Calculates&3D&radar&reflectivity.&&Optional&variables&iliqskin&and&ivarint&default&to&0.&&
If&iliqskin&=&1,&then&frozen&particles&above&freezing&are&assumed&to&scatter&as&a&liquid&
particle.&&If&ivarint&=&1&then&intercept&parameters&are&calculated&based&on&the&work&of&
Thompson,&Rasmussen&and&Manning&in&2004&Monthly&Weather&Review.
vapor_wrf.DBZ_MAX(P,PB,QRAIN,QGRAUP,QSNOW,T,QVAPOR,+
iliqskin,ivarint):&&Calculates&2D&Radar&reflectivity;&i.e.&the&vertical&maximum&of&DBZ,&
as&described&above.
vapor_wrf.ETH(P,PB,T,QVAPOR): Calculates&the&3D&equivalent&potential&
temperature.
vapor_wrf.PV(T,P,PB,U,V,ELEVATION,F):&&Calculates&the&3D&potential&vorticity.&
Note&that&F&is&a&2D&WRF&variable.&&ELEVATION&is&the&VAPOR&3D&variable&that&
specifies&the&elevation&in&meters&above&sea&level.
vapor_wrf.RH(P,PB,T,QVAPOR): Calculates&the&3D&relative&humidity.
vapor_wrf.SHEAR(U,V,P,PB,level1=200,level2=850):&&Calculates&horizontal&wind&
shear,&defined&as&the&RMS&difference&between&the&horizontal&velocity,&interpolated&to&
the&specified&pressure&levels&in&millibars(level1&and&level2)
vapor_wrf.SLP(P,PB,T,QVAPOR,ELEVATION): Calculates&the&2D&seaKlevel&
pressure.&&Note&that&ELEVATION&is&the&VAPORKWRF&3D&variable&indicating&vertical&
elevation&above&sea&level
vapor_wrf.TD(P,PB,QVAPOR): Calculates&3D&dewpoint&temperature
vapor_wrf.TK(P,PB,T): Calculates&3D&temperature&in&degrees&Kelvin.
Note:&&The&following&four&methods&are&useful&whenever&dealing&with&layered&grids,&
such&as&WRF&or&ROMS.
vapor_wrf.wrf_deriv_findiff(A,ELEV,dir): Calculates&the&derivative&of&a&WRF&(or&
layered)&variable&in&the&direction&dir&(=0,1,&or&2),&where&ELEV&is&the&VAPOR&
ELEVATION&variable.
vapor_wrf.wrf_grad_findiff(A,ELEV):&Returns&the&gradient&of&a&scalar&field&A,&
where&ELEV&is&the&VAPOR&ELEVATION&variable.
vapor_wrf.wrf_div_findiff(A,B,C,ELEV):&Returns&the&divergence&of&the&vector&field&
(A,B,C)&where&ELEV&is&the&VAPOR&ELEVATION&variable.&The&result&is&a&3K
dimensional&variable&representing&the&divergence&of&(A,B,C).
vapor_wrf.wrf_curl_findiff(A,B,C,ELEV):&Returns&the&curl&of&the&vector&field&(A,&B,&
C)&where&ELEV&is&the&VAPOR&ELEVATION&variable.&&The&result&is&a&3Ktuple&of&3K
dimensional&arrays.
Python+output+text:
The&Python&editor&in&VAPOR&does&not&have&all&the&normal&functionality&of&a&Python&
interpreter.&&Users&will&not&see&any&results&or&messages&until&they&press&“Test”&or&
“Apply”.&&If&the&script&has&no&output&text&and&no&errors,&there&is&a&popup&indicating&
successful&execution.&&To&debug&these&Python&scripts&it&is&often&useful&to&print&some&
results&as&well&as&other&diagnostic&information.&&To&provide&such&feedback,&during&
“Test”&mode,&all&Python&printed&output&is&presented&in&a&popup&window.&&An&
additional&popup&window&presents&Python&error&messages&and&error&traceback.&&
After&“Apply”&is&pressed,&the&Python&error&messages&will&appear in&popup&windows;&&
however,&the&printed&output&will&not&be&displayed.&&Instead&it&is&diverted&to&the&
VAPOR&diagnostics.&&Those&printed&messages&can&still&be&viewed&in&the&VAPOR&log&
file:&&From&the&Edit&menu,&click&“Edit&User&Preferences”&and&set&the&value&of&“Log&File&
Max”&for&Diagnostic&Messages&to&a&positive&value,&to&ensure&that&these&messages&will&
appear&in&the&log&file.&
Advanced+usage:
Python&is&a&powerful&programming&language&and&it&can&be&used&to&do&much&more&
than&applying&simple&formulas&to&existing&variables.&&Python&scripts&can&use&data&at&
other&timesteps&or&coordinates&to&determine&the&value&of&an&output&variable&at&a&
specific&time&and&position.&&For&instance,&such&calculations&are&useful&when&
calculating&derivative&operators&or&summarizing&3D&information&in&a&2D&variable&.&
VAPOR&users&can&apply&existing&Python&libraries&to&calculate&and&visualize&derived&
variables.&
The&Python&environment&used&in deriving&a&VAPOR&variable:
When&a&Python&script&is&used&in&VAPOR&to&calculate&an&output&variable,&it&is&required&
that&the&script&produce&a&NumPy&(3D&or&2D)&array&of&32Kbit&floating&point&(float32)&
values,&with&“C”&ordering.&&All the&variables&in&the&VAPOR&environment&are&
represented&as&collections&of&2D&or&3D&arrays,&one&array&for&each&time&step.&&The&2D&
arrays&use&the&horizontal&(X&and&Y)&spatial&dimensions&of&the&VDC.&&The&3D&arrays&
correspond&to&the&three&(X,Y,Z)&spatial&dimensions&of&the&VDC,&where&Z&is&the&vertical&
height.&&The&dimension&order&of&the&array&in&Python&is&reversed&from&the&dimensions&
used&in&VAPOR,&due&to&the&fact&that&VAPOR&data&arrays&are&accessed&in&FORTRAN&
order,&while&Python&defaults&to&using&C&coordinate&ordering.&&Thus,&the&first&
coordinate&of&a&3Kdimensional&array&in&the&Python&environment&corresponds&to&the&Z&
coordinate&in&the&VAPOR&visualization.&&The&second&Python&coordinate&is&the&Y&
coordinate&in&the&VAPOR&scene,&and&the&third&Python&coordinate&is&the X&coordinate&
in&VAPOR.&&&&When&dealing&with&twoKdimensional&variables,&the&first&coordinate&in&
the&Python&array&is&the&Y&coordinate&in&the&VAPOR&scene,&and&the&second&coordinate&
in&the&Python&array&is&the&X&coordinate&in&VAPOR.
The+vapor+module.++
VAPOR provides&an&internal&module,&“vapor”&that&is&only&visible&if&you&are&executing&
python&scripts&in&the&VAPOR&application.&&This&module&provides&access&to&the&
internal&state&of&VAPOR,&which&is&sometimes&needed&in&deriving&variables&in&the&
Python&environment.&&
There&are&four&predefined&variables&that&are&defined&in&the&vapor&module&and&may&
be&needed&for&calculating&a&variable:
vapor.TIMESTEP :&&The&integer&time&step&of&the&output&variable(s)&being&calculated
vapor.REFINEMENT&&:&&&The&integer&refinement&level&of&the&output&variables&being&
calculated
vapor.LOD :&&&The&integer&levelKofKdetail&(compression&level)&that&is&being&
calculated.
vapor.BOUNDS :&&This&is&a&6Ktuple&that&specifies&the&integer&extents&of&the&Z,&Y,&and&X&
coordinates&of&the&variable&being&calculated,&inside&the&full&3D&domain&of&the&current&
VDC.&&These&values&may&specify&a&region&larger&than&the&region&being&currently&
visualized&in&VAPOR,&because&VAPOR&always&stored&variables&in&blocks&(usually&32&
or&64&voxels&on&a&side).&&Using&“B”&to&denote&“vapor.BOUNDS”,&the&output&variable&
from&a&script,&as&a&NumPy&array,&must&have&shape&equal&to:
[B[3]KB[0]&+1,&B[4]KB[1]+1,&B[5]KB[2]+1]&if&it&is&3Kdimensional;&
if&it&is&2Kdimensional,&the&output&NumPy&array&shape&must&be:
[B[4]KB[1]+1,&B[5]KB[2]+1]
Note&that&the&value&of&vapor.BOUNDS_is&based&on&the&extents&of&the&output&variable&
that&is&requested&at&runtime&by&the&VAPOR&visualization.&&When&the&output&variable&
is&2D,&the&Z&extents&(from&BOUNDS[0]&to&BOUNDS[3]&)&are&set&to&the&Z&bounds&of&the&
full&data&domain.
Note&also&that,&for&efficient&data&access,&VAPOR&always&stores&variables&on&block&
boundaries,&so&the&values&of&BOUNDS&will&often&describe&a&volume&of&data&that&
properly&contains&the&current&region&in&the&VAPOR&scene.&&Each&element&of&BOUNDS&
will&typically&be&a&multiple&of&32,&except&that&the&largest&value&in&BOUNDS&will&be&no&
greater&than&the&largest&value&of&the&corresponding&coordinate&in&the&VDC.
There&are&also&a&few&Python&methods&that&are&provided&for&use in&accessing&data&in&
the&VDC.&&These&are&also&in&the&“vapor”&module,&which&is&already&imported&prior&to&
script&execution.&&They&include:
userCoord+=+vapor.MapVoxToUser(voxcoord,+refinementLevel) :&This&returns&a&
floatingKpoint&3Ktuple,&“userCoord”&that&is&obtained&by&converting&the&specified
integer&3Ktuple&voxcoord,&at&the&specified&integer&refinement&level.
voxCoord+=+vapor.MapUserToVox(usercoord,+refinementLevel) :&This&returns&
an&integer&3Ktuple,&“voxCoord”&that&is&obtained&by&converting&the&specified&floatingK
point&3Ktuple&usercoord,&at the&specified&integer&refinement&level.
maxCoord+=+vapor.GetValidRegionMax(timestep,variableName,+
refinementLevel) :&This&returns&an&integer&3Ktuple,&“maxCoord”&that&is&the&
maximum&of&the&valid&voxel&coordinates&of&the&variable&at&the&specified&timestep&and&
refinement&level.&&&
minCoord+=+vapor.GetValidRegionMin(timestep,variableName,+
refinementLevel) :&This&returns&an&integer&3Ktuple,&“minCoord”&that&is&the&
minimum&valid&voxel&coordinates&of&the&variable&at&the&specified&timestep&and&
refinement&level.&&
var3+=+vapor.Get3DVariable(timestep,+variablename,+refinement,+lod,+bounds)
:&returns&a&3Kdimensional&array&of&variable&data&from&the&VDC,&based&on:
timestep&(integer&time&step)
variablename&(the&variable&name,&a&string)
refinement&(the&refinement&level, an&integer)
lod&(the&level&of&detail&or&compression&level,&an&integer)
bounds&(a&6Ktuple&specify&the&location&of&the&data&in&the&full&domain,&as&with&
vapor.BOUNDS&described&above.
var2+=+vapor.Get2DVariable(timestep,+variablename,+refinement,+lod,+bounds)
:&&returns&a&twoKdimensional&array&of&data&from&a&2Kdimensional&variable&in&the&VDC,&
with&arguments&as&above.&&The&“bounds”&argument&must&be&an&integer&6Ktuple,&
however&the&first&and&fourth&elements&are&ignored.
val =+vapor.VariableExists(timestep,+varname+[refinement,[lod]]): returns&0&or&
1&(False&or&True)&depending&on&whether&the&specified&variable&is&present&at&the&
specified&timestep,&refinement,&and&compression&lod.&&If&the&refinement&level&or&lod&
is&not&specified,&the&default&value&is&0.
msk =+vapor.Get3DMask(timestep,+varname+,refinement,lod,+bounds) returns&
the&boolean&3D&mask&variable&indicating&the&location&where&the&3d&variable&
“varname”&is&not&set&to&its&missing&value.&&
msk =+vapor.Get2DMask(timestep,+varname+,refinement,+lod,+bounds) returns&
the&boolean&2D&mask&variable&indicating&the&location&where&the&2d&variable&
“varname”&is&not&set&to&its&missing&value.&&
Note&that&when&you&write&your&own&Python&script,&the&script&will&have&access&to&all&
variables&in&the&VDC&(at&the&current&refinement,&bounds,&timestep,&and&lod)&that&are&
specified&in&the&“Input&Variables”&checkboxes.&&It&is&only&necessary&to&use&the&above&
Get2Dvariable()&and&Get3Dvariable()&methods&when&the&VDC&variables&are&needed&
at&coordinates,&refinement&levels,&levelsKofKdetail,&or&timesteps&different&from&those&
of&the&output&variables.&&
Missing+Values.&&When&the&VDC&contains&variables&with&missing&values&(e.g.&ROMS,&
POP,&or&MOM&model&outputs),&the&vapor&python&environment&utilizes&the&numpy.ma&
(masked&array)&module,&so&that&array&operations&are&only&applied&to&valid&data.&&&
This&should&be&transparent&to&users&unless&user&python&routines&access&individual&
elements&in&the&model&variables.&&In&that&case,&user&routines&may&need&to&utilize&the&
Get2DMask()&and&Get3DMask()&in&order&to&ensure&that&operations&are&only&applied&
to&valid&data&in&the&arrays.
Using+VAPOR+with+other+Python+modules
The&installation&of&VAPOR&contains&an&installation&of&Python&2.7&with NumPy&1.6&and&
SciPy&0.10&in&the&python2.7 subdirectory&of&the&VAPOR&lib&directory.&&The&
corresponding&Python&interpreter&executable&is&installed&in&the&VAPOR&bin&
directory.&&VAPOR&ensures&that&this&installation&of&Python&is&used&by&setting&the&
environment&variable&PYTHONHOME&prior&to&running&the&Python&scripts.&&&On&
Windows,&the&PYTHONHOME&variable&is&set&by&the&installer.&&On&Linux&and&
Macintosh,&the&PYTHONHOME&variable&is&set&at&runtime.&&Users&can&modify&the&
default&Python&installation&in&(at&least)&two&ways:
• Extend&the&VAPOR&Python&environment:&&Other&useful&Python&modules,&such&
as&PyNIO,&etc.&can&be&installed&inside&the&VAPOR&python&environment.&&Apply&
the&VAPOR&python&executable&to&the&setup.py&script&associated&with&the&
module.&&The&module&must&be&compatible&with&Python&2.7.
• Specify&that&VAPOR&use&a&different&Python&2.7 environment:&&VAPOR&can&be&
redirected&to&use&another&Python&2.7 environment&by&setting&the&
environment&variable&PYTHONHOME&to&the&root&directory&of&the&new&Python&
environment&prior&to&starting&vaporgui.&&On&startup&(on&Linux&and&
Macintosh),&VAPOR&will&display&a&warning&message&indicating&that&the&value&
of&PYTHONHOME&has&been&changed.&&&It&is&required&that&NumPy&be&installed&
in&the&siteKpackages&directory&in&your&Python&environment,&and&it&is&also&
necessary&that&the&new&version&of&Python&be the&same&version&of&Python&(2.7)&
with&which&VAPOR&is&linked.

原创粉丝点击