問題タブ [namespace-package]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2743 参照

python - setuptoolsでいくつかのPythonサブプロジェクトを管理する方法は?

同じ基本パッケージを使用して、サブプロジェクトを処理するための正しい/最も簡単な/最もpythonicな方法について疑問に思っています。現在、次のようなファイル構造があります。

名前空間company_nameをすべてのプロジェクトに共通に保ちたいのですが(おそらくこれ自体は非pythonicですか?)、proj1とproj2が開発モードでインストールされると、最初にインストールされたものが壊れます。import company_name...どのcompany_nameパッケージを調べるか混乱しているようで、最初/最後/ランダムなパッケージを取得します。

これは通常、より大きなPythonプロジェクトでどのように処理されますか?ある種のメガエッグを構築するトランクのsetup.pyでこれを解決することは可能ですか?グーグルやスタックで関連情報を見つけられなかったので、リンクだけでもどんな情報でも大歓迎です!


編集:ルートフォルダにsetup.pyを追加してみました

ファイルに適切なものpkg_resources.declare_namespace(__name__)がありますが、次のようになります 。__init_.py./setup.py bdist_egg

company_nameセットアップコマンドのエラー:ディストリビューションに名前空間パッケージ'company_name'のモジュールまたはパッケージが含まれていません

0 投票する
1 に答える
7090 参照

python - Python:複数のsetup.pyファイルを含む複数のパッケージ

Pythonのsetup.pyファイルを作成して自分のやりたいことを実行するのに苦労しています。私はこのように1つのパッケージを設定しています:

私はこのような別のパッケージ設定を持っています:

だから、物事は私のsite-packages/ディレクトリに次のように整理されています。

両方をpipでインストールした後、まさにこれが必要です。

私の問題は、2番目のパッケージを(pipを使用して)アンインストールすると、最初のパッケージも消去されることです。これは、私が望んでいることではありません。myutils.bを削除し、myutils.aをそのままにしておくだけです。

myutils/フォルダーに複数のinit.pyファイルがあると混乱しているのではないかと思いますが、これらを正しく機能させる方法が他にわかりません。

-

この役立つページも見つかりました:

http://www.sourceweaver.com/musings/posts/python-namespace-packages

0 投票する
1 に答える
7861 参照

python - Python で名前空間パッケージを作成する方法

distributed の Namespace Packagesから、名前空間パッケージを利用して、大きな Python パッケージをいくつかの小さなパッケージに分割できることがわかりました。本当にすごいです。ドキュメントには次のことも記載されています。

ところで、プロジェクトのソース ツリーには、通常の Python パッケージ レイアウトで名前空間パッケージの __init__.py ファイル (およびすべての親パッケージの __init__.py) を含める必要があることに注意してください。これらの__init__.py ファイルには次の行が含まれている必要があります。

このコードは、名前空間パッケージ機構が動作していること、および現在のパッケージが名前空間パッケージとして登録されていることを確認します。

ディレクトリの階層をパッケージの階層と同じにするメリットはあるのでしょうか? それとも、これは、distribute/setuptools の名前空間パッケージ機能の技術的要件ですか?

元、

サブパッケージfoo.barを提供したいと思います。これにより、次のフォルダー階層を構築し、__init__.py を準備して setup.py を名前空間パッケージとして機能させる必要があります。

私は名前空間パッケージに精通していませんが、1) foo/bar と 2) (ほぼ) 1 行の __init__.py が日常的なタスクであるように見えます。彼らは「これは名前空間パッケージです」といういくつかのヒントを提供しますが、 setup.pyにその情報が既にあると思いますか?

編集:

次のブロックに示されているように、ネストされたディレクトリがなく、作業ディレクトリに __init__.py が 1 行しかない名前空間パッケージを作成できますか? つまり、setup.pyに 1 行を追加するだけでそれらを自動的に生成するように依頼できnamespace_packages = ['foo']ますか?

0 投票する
1 に答える
419 参照

python - Python 名前空間パッケージを使用した開発

Python 名前空間付きパッケージに問題があり、良い解決策は何か疑問に思っています。

私のプロジェクト構造は次のようになります

それが私が取り組んでいるプロジェクトです。同じ名前空間にもある依存関係があります。

私は、django アプリケーションの「app_ext」名前空間パッケージに取り組んでいます。ただし、受信に問題が発生していno module named app_extます。

依存関係の名前空間パッケージのインストール方法に関係していると思います(PIPでインストールしています)。依存関係の名前空間パッケージは__init__.py、distribute / setuptools のドキュメントに記載されているようにファイルと共にインストールされませんが、実際にはすべてのインストール パッケージに次の宣言が含まれています。

では、本当の質問に移ります。関連する名前空間パッケージが既にインストールされている場合に、名前空間パッケージを操作するコツはありますか?

0 投票する
2 に答える
681 参照

python - コア部分を持つ名前空間パッケージ?

この質問は、Pythonで名前空間パッケージを作成する方法とPython名前空間パッケージを作成するにはどうすればよいですか?

PEP 420、および配布ドキュメントに注意してください。

名前空間パッケージのに他のコードやデータを含めないでください__init__.py。開発中、またはプロジェクトが.eggファイルとしてインストールされている場合は機能しているように見えますが、プロジェクトが「システム」パッケージツールを使用してインストールされている場合は機能しません。このような場合、__init__.pyファイルはインストールされず、実行されることもありません。


これはすべて、独立して分散された拡張サブパッケージを持つ「メインライブラリ」パッケージを持つことを不可能にしているようです。私が欲しいのは、次のことができるようにすることです。

  1. 次のように使用するコアライブラリパッケージを定義します。

    /li>
  2. 個別にパッケージ化および配布されたライブラリ拡張機能を次のように使用できるようにします。

    /li>

名前空間パッケージでこれを実行できると期待していましたが、上記の質問とリンクに基づくと、そうではないようです。これはまったくできますか?

0 投票する
3 に答える
2622 参照

python - 同じ名前空間を使用する 2 つのパッケージをインストールできません

更新: setup.py のみを使用して両方のパッケージをインストールすると、問題なくインストールされます。sdist によって生成された tarball を抽出してインストールすると、同じエラーが発生します。これは、問題が setuptools のどこかにあることを意味します。

私は、testsuite と testsuite.prettyprint という 2 つの名前空間パッケージを持つ 2 つのプロジェクトを開発しました。これらの名前空間パッケージには、次のもの__init__.pyが含まれています。

testsuite.prettyprint.outcomes の setup.py は次のとおりです。

testsuite.prettyprint.traceback の setup.py は次のとおりです。

両方をインストールすると、一方のインストールが拒否されます。

何が悪いのかわかりません。インストールの順序を変更しても、他が見つからないと表示されます。

0 投票する
2 に答える
1521 参照

python - Python 名前空間パッケージの現在の状態

メイン モジュール内に複数の python サブ モジュールを配置したいのですが、それらを個別の python パッケージとして配布したいと考えています。したがって、パッケージ A は「my_data.source_a」を提供し、パッケージ B は「my_data.source_b」を提供する必要があります。

これには名前空間パッケージを使用する必要があることがわかりましたが、詳細を把握しようとすると、その問題をカバーする複数の PEP が見つかりました。PEP 420 は、PEP 402 と PEP 382 に基づいて構築された最新のもののようです。

私には、実装のさまざまな PEP のステータスがどのようなものかは明確ではありません。私の質問は次のとおりです

0 投票する
1 に答える
2446 参照

python - Python setuptools: __init__.py が declare_namespace() を呼び出さない

zope2.zodbbrowser 0.2 パッケージ ( https://pypi.python.org/pypi/zope2.zodbbrowser/0.2 ) をインストールしようとしています。セットアップ スクリプトは、次のエラーで失敗します。

マニュアルの関連セクションは次のようです: https://pythonhosted.org/setuptools/setuptools.html#namespace-packages

しかし、私は setuptools の内部構造に詳しくなく、マニュアルを参照しても問題を解決できませんでした。この名前空間の問題を解決して、パッケージを正常にインストールするにはどうすればよいですか?

参考までに、~/zodbbrowser/src/zope2.zodbbrowser/zope2/__ init__.py のソース コードは次のとおりです。

0 投票する
0 に答える
227 参照

python - $PYTHONPATH 経由で使用する名前空間パッケージをビルドする

少しぎこちない言葉遣いの質問ですが、基本的には次のとおりです。

  • $PYTHONPATH に追加することによってのみ、Python パッケージをアクティブ化できます
  • この方法で任意の python パッケージを使用できるようにしたい
  • 一部の python パッケージはパッケージ名前空間を使用します

Python パッケージをビルドするためのラッパー スクリプトがありsetup.py --single-version-externally-managedます。このビルド プロセスには何でも追加できますが、多数のパッケージのビルドに使用されるため、一般的なものでなければなりません。

通常、ビルド結果を $PYTHONPATH に追加するだけで問題ありません。

しかし、名前空間付きのパッケージ (例: ) では、ファイルを使用するため、指定されたディレクトリにndg-httpsclientある場合にのみ機能するように見えます。site-packages.pth

紛らわしいことにndg/__init__.py名前空間パッケージのボイラープレート コードを含むソースに があります。

で直接インポートできるように見えます$PYTHONPATHが、インストールすると次のように罵倒されます。

おそらくそれには正当な理由があると思われますが、.pth ファイルに依存している$PYTHONPATHため、技術的な理由で実行できない既知の場所にコピーすることによってのみ、結果を 経由で使用することはできません。また、アプリの初期化に任意の python を挿入することもできません (これsite.addsitedir()も同様です)。

では、よく知られた場所に配置せずに名前空間モジュールをインポート可能にする方法について私が知らない方法はありますか? あるいは、 setuptools をスキップしないように説得する方法はあり__init__.pyますか?それは実際に機能しますか?

0 投票する
0 に答える
243 参照

python - setuptools で名前空間パッケージから直接インポートする

モジュールを名前空間パッケージと特定のサブプロジェクトのクラスのコンテナーの両方として使用する方法は? つまり、サブパッケージではなく名前空間パッケージから何かを直接インポートするにはどうすればよいでしょうか?

例は、質問をより明確にすることができます。

の 3 つのサブパッケージcalc

という名前の名前空間パッケージを作成したいとします。そのパッケージcalcには 3 つのプロジェクト ( sscce : calcs.tar.gz ) があります。ディレクトリにある最初のものcalc-addは、次の構造を持っています。

の内容calc-add/calc/__init__.pyはただ

名前空間パッケージで必要とされadd.py、次の機能のみを備えています。

calc-subディレクトリには、次の構造を持つ別のプロジェクトがあります。

この__init__.pyファイルは前のものと同じでsub.py、単純な機能しかありません。

最後にcalc-main、次の内容のディレクトリがあります。

繰り返しますが、 に__init__.pyは上記の行しかありませんmain.pyが、次のコードがあります。

関数を呼び出す方法apply()関数を呼び出す方法

$PYTHONPATH以下のように設定してPythonインタープリターを呼び出すと:

次に、apply()この方法で呼び出すことができます:

apply()ただし、次のように から直接呼び出したいと思いcalcます。

に次の行を追加すると、明らかに機能しますcalc-main/calc/__init__.py

ただし、setuptools のドキュメントは非常に明確です。

名前空間パッケージの __init__.py に他のコードやデータを含めてはなりません。開発中、またはプロジェクトが .egg ファイルとしてインストールされている場合は動作しているように見えても、プロジェクトが「システム」パッケージ ツールを使用してインストールされている場合は動作しません。そのような場合、__init__.py ファイルはインストールされません。処刑どころか。

__init__.pyでは、ファイルの制限を破ることなく、どうすれば欲しいものを手に入れることができるでしょうか? それは可能ですか?