我创建了一个可执行文件,使其成为单个文件可执行文件。
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中。
我如何才能发现脚本是从鸡蛋还是鸡蛋路径执行的?
答案 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时。