Applicationshipped python无法正确自动设置sitedir

2024-10-02 22:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我所在的团队正在开发一个可以用python编写脚本的应用程序(目前在Windows上)。python2.6安装在应用程序.exe,因此最终用户不必在其工作站上安装python。你知道吗

我没有亲自选择python的上述发行版,我发现它非常奇怪,甚至不知道它是从哪里来的(我开始工作时它就在那里)。这是一个平原python.exe,旁边还有python26.dll、python26.zip和一些.pyd和.dll。 python26.zip的内容类似于lib/目录中的内容。你知道吗

dir结构如下所示:

ApplicationDir/
    ├ Application.exe
    ├ Application.dll
    ├ _Application.pyd
    ├ python.exe
    ├ python.dll
    ├ python26.zip
    ├ _sqlite3.pyd
    ├ sqlite3.dll
    ├ select.pyd
    ├ _socket.pyd
    └ [... some more pyd follow]

现在我想包括一些我自己的纯python包,这些包应该可以与我的应用程序一起使用(比如与数据库交谈等等)。你知道吗

我希望如果我继续使用./lib/site-packages/就可以了。你知道吗

ApplicationDir/
    ├ Application.exe
    ├ ...
    └ lib/
        └ site-packages/
            ├ foo-1.2.egg
            ├ bar-0.9.egg
            └ more-libs.pth

更多-库.pth内容:

./foo-1.2.egg
./bar-0.9.egg

我的假设是错误的,这是个大问题。 我已经通过复制我的系统python安装(使用libs、Lib、DLLs等dir)测试了一个“经典”python发行版,它可以工作。 但由于我只负责python模块,所以我不确定我是否能来说“嘿,伙计们,让我们以另一种方式分发python”。你知道吗

我被困在这里,因为site似乎没有搜索lib/site packages目录。你知道吗

有什么想法吗?也许另一个python迷你发行版可以搜索正确的目录?还是我该补一下站点.py为了满足我的需要?你知道吗

干杯,很快就会读到你的!你知道吗

编辑 我找到了一个解决方法,在python26.zip存档中有一个site.py补丁。 我强制添加一个名为“python packages”的站点目录,该目录应该与我的python.exe. 我在addsitepackages()函数中执行此操作,该函数在python启动后立即调用。你知道吗

补丁如下:

285c285,290
< 
---
>                                      
>     #HACK for distribution with a packages site-dir
>     exec_dir = os.path.dirname(sys.executable)
>     sitedirs.append(os.path.join(exec_dir, 'python-packages'))
>     # end of hack
>     

Tags: 目录应用程序内容applicationegglibpackagesdir
1条回答
网友
1楼 · 发布于 2024-10-02 22:33:18

您可以在应用程序中添加ApplicationDir/lib/site包搜索路径地址:

import sys, os
sys.path += [os.path.join(os.path.dirname(__file__), 'lib', 'site-packages')]

或使用环境变量:

PYTHONPATH=/path/to/lib/site-packages

或检查sysconfig模块:

import sysconfig
print sysconfig.get_config_vars()

例如,platlib安装在{platbase}/lib/python{py_short_version}/site-packages(根据系统配置.py)你知道吗

相关问题 更多 >