問題タブ [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.
python - setuptools を使用すると、名前空間パッケージの __init__.py ファイルが消えるのはいつですか?
setuptoolsのドキュメントは__init__.py
、名前空間からファイルにコードを追加することについて非常に明示的です。
名前空間パッケージの
__init__.py
. 開発中、またはプロジェクトが .egg ファイルとしてインストールされている場合は機能しているように見えても、プロジェクトが「システム」パッケージ ツールを使用してインストールされている場合は機能しません。このような場合、__init__.py
ファイルはインストールされず、実行もされません。 .
しかし、私はこれらの「システム」パッケージ ツールが何であるかを理解していません。彼らは何ですか?__init__.py
ファイルがなくなったこの状況をどのように再現できますか?
python - Python ライブラリのインストール後に奇妙なファイルが自動的に作成される
C ライブラリに依存する Python ライブラリがあるので、Cython を使用して対処しています。ライブラリをラップすることができ、インストールの準備が整いましたが、奇妙な問題に直面しています (注: 広告を避けるために、ライブラリの名前は使用していません)。
次のディレクトリ構造があります。
はPython で簡単にインポートできる にsetup.py
変換_lib.pyx
されるはずです。_lib.so
また、library.module
名前空間パッケージとしてインストールされることになっているためlib.__init__.py
、PEP420 で必要な 1 行のコードが含まれています。
しかし、私がするとき:
作成されたものを確認した後、次の行が含まれる作成された内部が.egg
見つかりました_lib.py
module
_lib.py
が一緒に存在している間、インポートする_lib.so
とすぐに、C ライブラリの実際の Python ラッパーであるインポートではなく、_lib.py ファイルをインポートします。lib.py
_lib
_lib.so
_lib.py
が作成される理由と、それを回避する方法を知りたいです。
python - Python 名前空間パッケージのローカル テスト バージョンをインポートする
Python 2.7 名前空間パッケージのローカル テスト バージョンをインポートする方法を知りたいです。この例では、パッケージはルートSka.engarchive
の下の名前空間パッケージです。Ska
(この構造は、レガシーによって強制されています)。
この例はsys.path
、ローカル ディレクトリから開始するように設定した後でも、パッケージのローカル バージョンではなく、インストールされているバージョンがインポートされることを示しています。
この問題は、Python 2 での名前空間パッケージの実装方法に関連していると思います。どういうわけか、名前空間パスは常にリストの先頭にあります。しかし、おそらくいくつかの回避策がありますか?パッケージのドキュメントを掘り下げるのに時間を費やしましたsite
が、適切なものが見つからなかっただけかもしれません。
上記の例では、Anaconda Python ディストリビューションを使用しています。興味深いことに、ActiveState の非常に古いビルドの Python を使用すると、この例ではローカル パッケージをインポートするという望ましい結果が得られます。
どんな助けでも大歓迎です!
python - デフォルトで新しい python パッケージを名前空間パッケージとして作成する必要がありますか?
Python 3.3 には暗黙的な名前空間パッケージ (PEP420) があり、Python 2.7 では、__init__py に 2 行を追加することでパッケージを名前空間パッケージとしてマークできます。Python で名前空間パッケージを作成する方法を参照してください。
パッケージが有効にする機能を考えると、新しいパッケージはデフォルトで名前空間パッケージとして作成する必要があるようです。
通常の python パッケージは、「クローズド」パッケージの必要性が明らかな例外的な場合にのみ使用してください。
このアプローチの欠点は何ですか?