31

私はpythonパッケージ管理が初めてで、確かに何か間違ったことをしました。次のようなディレクトリ構造を作成するように勧められました。

bagoftricks
├── bagoftricks
│   ├── bagoftricks
│   │   ├── __init__.py
│   │   └── bagoftricks.py
│   └── __init__.py
├── README.md
└── setup.py

bagoftricks.py には 2 つの関数が含まれていlevenshtein()ますgeofind()

これらを次のように呼びたい:

import bagoftricks

x = bagoftricks.levenshtein(arg1,arg2) 

代わりに、私はこれをしなければならないことがわかりました:

import bagoftricks

x = bagoftricks.bagoftricks.levenshtein(arg1,arg2) 

冗長な名前付けをせずに、最初からパッケージを整理するより良い方法はありますか?

アップデート

そこで、以下の Avichal Badaya の指示に従い、1 レベルのネスティングを削除しました。つまり、私は今...

bagoftricks
├── bagoftricks
│   ├── __init__.py
│   └── bagoftricks.py
├── README.md
└── setup.py

ただし、このパッケージを呼び出すには、まだ...

from bagoftricks.bagoftricks import geofind()

また

import bagoftricks

それから

>>> bagoftricks.bagoftricks.geofind()

希望というより……。

from bagoftricks import geofind()

また

import bagoftricks

>>> bagoftricks.geofind()

ネストの余分なレイヤーを削除することはできません。類推して、モジュールがフラットになるように、もう 1 レベルのネストを削除しようとすると、次のようになります。

bagoftricks
├── __init__.py
├── bagoftricks.py
├── README.md
└── setup.py

パッケージをまったくビルドできません...

$ python setup.py build
running build
running build_py
error: package directory 'bagoftricks' does not exist

冗長なトップレベル名のインポートなしで、標準パッケージが使用するような自然なインポートの秘訣は何ですか?

4

3 に答える 3

1

次の構造に従います。

bagoftricks 
    ── bagoftricks
    │ ├── __init__.py
    │ └── bagoftricks.py 
    ├── README.md
    └── setup.py

そして、次のように使用できるはずです:

from bagoftricks.bagoftricks import levenshtein, geofind

ただし、フォルダー構造を変更した後は、次のことを行います:-

pip uninstall <your package name mostly mentioned in setup.py>

そしてパッケージを再インストールします

その間、setup.pyを確認してください

#!/bin/env python
import os.path
from setuptools import setup, find_packages

def current_path(file_name):
    return os.abspath(os.path.join(__file__, os.path.pardir, file_name))

setup(
    name = 'bagoftricks',
    version = '0.1',
    include_package_data = True,
    packages=find_packages(),
)

setup には他のパラメーターも含まれる場合があります。うまくいくことを願っています。

于 2013-07-03T21:17:09.773 に答える