相关疑难解决方法(0)

python路径和导入顺序

好的,所以我真的想要做到这一点,因为我在生成一些大的py2app/py2exe包时会继续遇到它.所以我的包中包含很多模块/包,这些模块/包也可能在用户站点包/默认位置(如果用户有python发行版)但我希望我的分布式包在从我的发行版运行时生效.

现在从我在这里 读到的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')
Run Code Online (Sandbox Code Playgroud)

这基本上是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)
Run Code Online (Sandbox Code Playgroud)

这里PYTHON_EXE_PATH是由py2app添加到包的python exe的路径.现在,这在没有安装python的机器上运行良好.但是,当python发布已经存在时,它们的站点包优先.

python

19
推荐指数
2
解决办法
3万
查看次数

在PYTHONPATH环境变量之前的路径中的鸡蛋

如果我从easy_install安装了软件包,则会sys.pathPYTHONPATH变量中的项之前添加egg .

例如,如果我在当前目录中安装了一个名为foo的egg包以及一个名为foo的包,那么执行以下操作:

PYTHONPATH="." python
>>> import foo
Run Code Online (Sandbox Code Playgroud)

这将使用egg版本foo而不是本地目录.检查sys.path显示鸡蛋放在物品之前PYTHONPATH.这似乎破了.有没有办法覆盖这种行为?

python setuptools easy-install

16
推荐指数
1
解决办法
8900
查看次数

标签 统计

python ×2

easy-install ×1

setuptools ×1