Python - 运行脚本是在一个鸡蛋?

时间:2012-08-08 11:48:36

标签: python egg

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

setup.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。我想读取一个必须与egg相同的dir配置文件。并且相同的脚本也必须可执行为“非egg”,因此配置文件将在脚本的dir中。

我如何才能发现脚本是从鸡蛋还是鸡蛋路径执行的?

2 个答案:

答案 0 :(得分:0)

您应该使用ResourceManager API加载配置文件。这样,即使压缩,您的打字代码也可以加载配置文件。

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

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

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

最重要的是,无论你是否实际安装为鸡蛋或独立,它都能正常工作。

答案 1 :(得分:0)

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

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

此外,当我在dir中使用配置文件时,它也是正确的。

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