2

我创建了一个可执行的 egg 以使其成为单个文件可执行文件。

设置.py

#!/usr/bin/env python
from setuptools import setup, find_packages

setup(
    name='app',
    version='0.5',
    description='foo',
    author='microo8',
    author_email='xxx@email.com',
    packages=["foo", "bar"],
    install_requires=["sqlalchemy>=0.7", "paramiko>=1.7.7.1"],
    entry_points = {
        'setuptools.installation': [
            'eggsecutable = foo.module:main',
        ]
    }
)

我现在可以称之为:./app-0.5-py2.7.egg,但相对路径都在鸡蛋中。当我调用它打印print __file__的函数时。我想读取一个配置文件,它必须与鸡蛋在同一个目录中。并且相同的脚本也必须作为“非鸡蛋”可执行,因此配置文件将与脚本一起位于目录中。main/home/user/app-0.5-py2.7.egg/foo/module.py

我怎样才能知道脚本是从鸡蛋和鸡蛋路径中执行的?

4

2 回答 2

0

您应该使用ResourceManagerAPI加载配置文件。这样,您的蛋化代码即使在压缩时也可以加载配置文件。

import pkg_resources
configdata = pkg_resources.resource_string(__name__, "myconfigfile.cfg")

API 可以检查是否存在、测试目录、读取数据或为您提供鸡蛋中任何资源的打开文件对象。

API 负责处理所有细节;例如,如果您绝对必须有一个资源的文件名但从一个压缩的鸡蛋运行,它会将文件提取到一个临时目录。

最重要的是,无论您实际上是作为鸡蛋安装还是独立安装,它都可以工作。

于 2012-08-08T12:46:55.843 回答
0

所以我不知道如何检查运行脚本是否在鸡蛋中,但是可以通过以下方式获得配置文件路径:os.path.realpath('config.cfg').

这适合我,当我有一个包含可执行文件的目录和配置文件时,这是一个正确的路径。

此外,当我在配置文件的目录中只有脚本时,它也是正确的。

而且当我使用pyinstaller创建单文件 exe 时。

于 2012-08-09T12:45:03.870 回答