【发布时间】:2012-03-06 15:28:04
【问题描述】:
我真的很想解决这个问题,因为我在生成一些大的 py2app/py2exe 包时经常遇到它。我的包包含许多模块/包,这些模块/包也可能位于用户站点包/默认位置(如果用户有 python 分发版),但我希望我的分发包在从我的分发版运行时在它们之前生效。
现在从我读到的here PYTHONPATH 应该是在当前目录之后添加到sys.path 的第一件事,但是从我在我的机器上测试的情况来看并非如此,所有文件夹$site-packages$/easy-install.pth 中定义的优先级高于此。
谁能给我一些关于这个导入顺序的更深入的解释,并帮助我找到一种方法来设置环境变量,使我分发的包优先于默认安装的包?
到目前为止,我的尝试是,例如在 Mac-OS py2app 上,在我的入口点脚本中:
os.environ['PYTHONPATH'] = DATA_PATH + ':'
os.environ['PYTHONPATH'] = os.environ['PYTHONPATH'] + os.path.join(DATA_PATH
, 'lib') + ':'
os.environ['PYTHONPATH'] = os.environ['PYTHONPATH'] + os.path.join(
DATA_PATH, 'lib', 'python2.7', 'site-packages') + ':'
os.environ['PYTHONPATH'] = os.environ['PYTHONPATH'] + os.path.join(
DATA_PATH, 'lib', 'python2.7', 'site-packages.zip')
这基本上是py2app生成的包的结构。然后我就:
SERVER = subprocess.Popen([PYTHON_EXE_PATH, '-m', 'bin.rpserver'
, cfg.RPC_SERVER_IP, cfg.RPC_SERVER_PORT],
shell=False, stdin=IN_FILE, stdout=OUT_FILE,
stderr=ERR_FILE)
这里PYTHON_EXE_PATH是py2app添加到包中的python可执行文件的路径。这在没有安装 python 的机器上运行良好。但是,当 python 分发已经存在时,它的站点包优先。
【问题讨论】:
标签: python