2

python の paster を使用して簡単な Python パッケージを作成しました。パッケージのディレクトリ構造は次のとおりです。

pkg/
    __init__.py
    module1.py
    subpackage/
        __init__.py
        module2.py

init .py ファイルは空白で、module1.py には module2.py から何かをインポートする関数が含まれています。パッケージをインストールすると、python プロンプトから module1.py の関数を呼び出すことができます。

import pkg.module1

パッケージがインストールされた場所 (/usr/lib/python2.7/dist-packages/pkg/) に移動し、pkg ディレクトリを圧縮します。

zip -r pkg.zip pkg/

zipimport を使用して Python プロンプトからモジュールにアクセスしようとしています。

import zipimport
importer = zipimport.zipimporter('pkg.zip')
importer.find_module('pkg')
# <zipimporter object "pkg.zip">
importer.load_module('pkg')
# <module 'pkg' from 'pkg.zip/pkg/__init__.pyc'>
importer.is_package('pkg')
# True
pkg = importer.load_module('pkg')
# trying to call a function in module 1 called fcn1
pkg.module1.fcn1()
#Traceback (most recent call last):
#File "<stdin>", line 1, in <module>
#AttributeError: 'module' object has no attribute 'module1'
pkg.module1
#Traceback (most recent call last):
#File "<stdin>", line 1, in <module>
#AttributeError: 'module' object has no attribute 'module1'

module1 にアクセスする方法についてのアイデアはありますか? ありがとう。

4

3 に答える 3

3

次のことを試してください。

import sys
sys.path.append('./pkg.zip') # Or path to pkg.zip
import module1

module1.fcn1()

これはあなたのために使用zipimportします。

モジュールの公開部分をinit .py ファイルにリストする必要があるかもしれないと思いますPEP 273を見てください

于 2013-10-12T13:13:33.660 に答える
1

手順がありません。パッケージが zip ファイルに含まれていない場合は、次のようにします。

import pkg
import pkg.module1   # You did not do this.
result = pkg.module1.fnc1()

またはファイルの内容は次のpkg\__init__.pyようになります。

import module1 # __init__.py does it for you.
于 2015-04-23T02:08:07.770 に答える