問題タブ [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 投票する
2 に答える
2362 参照

python - Py2exe エラー: 名前空間パッケージはまだサポートされていません: パッケージ 'snowflake' をスキップしています

py2exe を使用して、次のスクリプトの .exe を生成しようとしています。

コードは非常に簡単で、魔法のように機能します。

py2exe を使用して .exe に変換したいのですが、その時点で次のエラーが発生しました。

Snowflake は、自分の DB (スノーフレーク データベース、かなり新しい) に接続できるようにするパッケージです。

私のOSは:Windows 10、Pythonバージョン3.5.1です

py2exe の私の setup.py :

私は周りを見回しましたが、この問題に対する答えは見つかりませんでした。誰かがアイデアを持っているなら。

よろしくお願いします。

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

python - 同じ名前空間のパッケージ: セットアップ スクリプトでモジュールをインポートできません

以下の状況が気になります。と という名前の 2 つのプロジェクトがproject_alphaありproject_bravo、どちらも最上位の名前空間 package を定義しているとしますmymeta。レイアウト:

両方mymeta/__init__.pyの s には行のみが含まれています ( setuptools docs の名前空間セクションに__import__('pkg_resources').declare_namespace(__name__)よると)。両方の内容: version.py

setup.pyスクリプトproject_alphaは非常に単純です。名前空間パッケージmymetaが宣言され、バージョンがversionモジュール から取得されます。

setup.pyスクリプトproject_bravoは同じ構造ですが、ひねりがあります:ビルドproject_bravoするタイミングによって異なりますproject_alpha:

をビルドproject_bravoすると、次のエラーが発生します。

残念ながら、私はここでエラーを理解していません。輸入の順番とか関係あるでしょ?mymeta.project_bravo.versioninのインポートをコメントアウトし、ハードコードされた文字列にproject_bravo/setup.py置き換えると、突然ビルドが成功します...version


編集: この問題の回避策を紹介しました。バージョンを直接インポートしようとする代わりにexec、インポートの問題を回避するためにバージョン モジュールを使用します。もちろん、これは適切な解決策ではないため、これを回答として投稿しませんが、それでもここにあります:

mymetaバージョン スクリプトが読み取られて実行されると、バージョンが初期化されるため、パッケージから何もインポートする必要はありません。

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

python - Python 3.6.0 暗黙の名前空間パッケージ

Python 3.6.0rc1 の暗黙的な名前空間パッケージで奇妙な動作を発見しました。私が間違っているのか、それとも Python 3.6 のバグなのか教えてください。

marrow2 つの別個のパッケージmarrow.utilmarrow.mailer. 2 番目のものは最初のものに依存します。

Python 2.7、3.5、および 3.6 用にmarrow.utilインストールしたとします。site-packages

ここにはファイルがありません。名前空間パッケージである__init__.pyため、これは正しいことです。marrowインストール中に次のログ メッセージが表示されます。

そして、marrow名前空間パッケージの 2 番目の部分をmarrow.mailer別のディレクトリにビルドします (ただし、インストールはしません)。たとえば、次のようにします。

このフォルダーで Python 2.7.12 または 3.5.2 を実行し、marrow.util(サイト パッケージから) インポートしようとすると、期待どおりに動作します。

しかし、Python 3.6 で同じモジュールをインポートしようとすると失敗します。

marrow.mailerMock で RPM パッケージとしてビルドしようとしたときに、この問題が見つかりました。Python 2.7 および 3.5 ではすべてが機能しますが、Python 3.6 はmarrow.utilサイト パッケージからインポートできないmarrow.mailerため、RPM のビルド中に のテストが失敗します。

失敗したテストからのトレースバックの例:

Python 3.6 の Changelog で、この問題に関連するものを見つけることができません。

助けてくれてありがとう。

編集:sys.path Python 3.6 をチェックインしましたが、すべて問題ないようです:

編集2:

まだ解決策が見つからず、応答がないため、状況を再現できる簡単な Bash スクリプトを作成しました。必要なのは Python 3.5 と Python 3.6 だけです。

このスクリプトを Python 3.5 で実行すると、Python 3.5 はmarrow.utilpip 経由でインストールされたものをインポートできmarrow.mailerますが、ローカル フォルダーにはインポートできないことがわかります。しかし、Python 3.6 はローカル モジュールmarrow.mailerをインポートできますが、モジュールをインポートすることはできませんmarrow.util

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

python - Python3 の Python 名前空間パッケージ

名前空間パッケージのトピックは、初心者にとっては少し混乱するように思われます。また、以前のバージョンの Python でいくつかの異なる方法で実装されていたり、StackOverflow に関する多くの Q&A が古くなっていることは役に立ちません。での解決策を探していPython 3.5ます

#シナリオ: 私は、一連の Python コードをモジュールとサブモジュールにリファクタリングし、これらの各プロジェクトを同じ名前空間で互いに独立して動作するようにセットアップする作業を行っています。

最終的には、内部 PyPi サーバーを使用して、これらのパッケージを内部ネットワークに提供し、外部 (パブリック) PyPi パッケージと混同したくありません。

例: 2 つのモジュールがあり、次のことを実行できるようにしたいと考えています。

反映されたモジュールは次のように分離されます。

リポジトリ 1:

リポジトリ 2:

私の Git リポジトリは既に と としてセットアップされているorg_client_client1_mod1ので、パッケージとファイルでorg_common_configセットアップを実行するだけでよいと思います。__init__.py

質問:

#1

では、__init__.pyこれらのうちどれを使用する必要がありますか?:

または:

#2

の場合、パラメータsetup.pyを追加する必要がありますか? その場合は、またはを使用しますか?namespace_modulesnamespace_modules=['org.common']namespace_modules=['org', 'common']

#3

どういうわけかこれを別の方法で実装するだけで、上記のすべてを忘れることができますか? おそらく、より単純な、またはより「pythonic」なものでしょうか?