2

実行可能な卵を作成して、単一ファイルの実行可能ファイルとして作成しました。

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__と、 が出力されます。卵と同じディレクトリにある必要がある構成ファイルを読みたいです。また、同じスクリプトを「non-egg」としても実行できる必要があるため、構成ファイルはスクリプトのあるディレクトリに配置されます。main/home/user/app-0.5-py2.7.egg/foo/module.py

スクリプトが卵と卵のパスから実行されていることを確認するにはどうすればよいですか?

4

2 に答える 2

0

ResourceManagerAPIを使用して構成ファイルをロードする必要があります。そうすれば、eggifiedコードはzip形式の場合でも構成ファイルをロードできます。

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

APIは、存在を確認したり、ディレクトリをテストしたり、データを読み取ったり、eggの一部であるリソースのオープンファイルオブジェクトを提供したりできます。

APIがすべての詳細を処理します。たとえば、リソースのファイル名が絶対に必要であるが、zip形式のeggから実行している場合は、ファイルを一時ディレクトリに抽出します。

何よりも、実際にエッグとしてインストールされているかスタンドアロンとしてインストールされているかどうかに関係なく機能します。

于 2012-08-08T12:46:55.843 に答える
0

したがって、実行中のスクリプトが卵にあることを確認する方法はわかりませんが、構成ファイルのパスはこれで取得できます: os.path.realpath('config.cfg').

これは私に合っています。実行可能な卵と構成ファイルを含むディレクトリがある場合、これは正しいパスです。

また、構成ファイルを含むディレクトリにスクリプトだけがある場合も正しいです。

また、pyinstallerを使用して単一ファイルの exe を作成する場合も同様です。

于 2012-08-09T12:45:03.870 に答える