問題タブ [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 - Py2exe エラー: 名前空間パッケージはまだサポートされていません: パッケージ 'snowflake' をスキップしています
py2exe を使用して、次のスクリプトの .exe を生成しようとしています。
コードは非常に簡単で、魔法のように機能します。
py2exe を使用して .exe に変換したいのですが、その時点で次のエラーが発生しました。
Snowflake は、自分の DB (スノーフレーク データベース、かなり新しい) に接続できるようにするパッケージです。
私のOSは:Windows 10、Pythonバージョン3.5.1です
py2exe の私の setup.py :
私は周りを見回しましたが、この問題に対する答えは見つかりませんでした。誰かがアイデアを持っているなら。
よろしくお願いします。
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.version
inのインポートをコメントアウトし、ハードコードされた文字列にproject_bravo/setup.py
置き換えると、突然ビルドが成功します...version
編集: この問題の回避策を紹介しました。バージョンを直接インポートしようとする代わりにexec
、インポートの問題を回避するためにバージョン モジュールを使用します。もちろん、これは適切な解決策ではないため、これを回答として投稿しませんが、それでもここにあります:
mymeta
バージョン スクリプトが読み取られて実行されると、バージョンが初期化されるため、パッケージから何もインポートする必要はありません。
python - Python 3.6.0 暗黙の名前空間パッケージ
Python 3.6.0rc1 の暗黙的な名前空間パッケージで奇妙な動作を発見しました。私が間違っているのか、それとも Python 3.6 のバグなのか教えてください。
marrow
2 つの別個のパッケージmarrow.util
とmarrow.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.mailer
Mock で 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.util
pip 経由でインストールされたものをインポートできmarrow.mailer
ますが、ローカル フォルダーにはインポートできないことがわかります。しかし、Python 3.6 はローカル モジュールmarrow.mailer
をインポートできますが、モジュールをインポートすることはできませんmarrow.util
。
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_modules
namespace_modules=['org.common']
namespace_modules=['org', 'common']
#3
どういうわけかこれを別の方法で実装するだけで、上記のすべてを忘れることができますか? おそらく、より単純な、またはより「pythonic」なものでしょうか?