使用本地模块替代系统安装模块(Python 2.x.x)

5 投票
1 回答
1732 浏览
提问于 2025-04-18 06:17

我在工作中有一个集群系统,里面装了Python和一些模块。不过我想用最新版本的模块,因为新版本有一些旧版本没有的方法。所以我在我能访问的地方,自己编译了这个模块和它的依赖。

# From my home directory: /gpfs/env/yrq12edu

# Get the source I need for the up to date version of the module I want to install locally.
svn co svn://svn.code.sf.net/p/simupop/code/trunk simuPOP

# Install PCRE stuff...
cd pcre-8.34
./configure --prefix=/gpfs/env/yrq12edu/pcre_install
make
make install
export PATH=/gpfs/env/yrq12edu/pcre_install/bin:$PATH
export LD_LIBRARY_PATH=/gpfs/env/yrq12edu/pcre_install/lib:$LD_LIBRARY_PATH
cd ..

# Install Swig Stuff...
cd swig-3.0.0
./configure --prefix=/gpfs/env/yrq12edu/swig_install
make
make install
export PATH=/gpfs/env/yrq12edu/swig_install/bin:$PATH
cd ..

export PYTHONPATH=/gpfs/env/yrq12edu/PythonModules/lib/python2.7/site-packages

# Build the up to date simuPOP module I need locally...
cd simuPOP
python setup.py install --prefix=/gpfs/env/yrq12edu/PythonModules 

我该怎么做才能确保在集群中运行我的Python脚本时,它会优先使用我本地的模块,而不是系统自带的那个?我在编译过程中已经修改了PYTHONPATH,这样应该可以让模块从本地加载。但我想知道,当系统里有旧版本和我新安装的本地版本时,Python会选择哪个。Python会自动优先加载本地版本吗,还是我需要指定某个选项来强制它使用本地版本?

谢谢,
Ben W.

1 个回答

0

根据官方文档,如果内置模块可用,Python会优先加载它。如果没有找到内置模块,Python就会在sys.path中的每一个路径里查找,sys.path的第一个路径是当前目录。

不过,如果我理解没错,标准模块和内置模块是不同的。标准模块是通过查找sys.path来找到的,所以如果你把自己的路径放在sys.path的最前面,Python就会加载你的模块,而不是标准模块。

撰写回答