どんなを守る私のPythonコードベースでごを見ることのできな特定のモジュールがいいですか?
-
22-07-2019 - |
質問
今したプロジェクトはPythonの数独自のアルゴリズムの高感度ビットの論理はいえ、いつまでも守り続けていきます。また、少しの外国人に選りすぐられたメンバーの公開)のコードです。できませんので、外部へのアクセス、プライベートビットのコードが、私たちのような公共のバージョンを事あります。
というプロジェクトFooは、モジュール bar
, 一機能 get_sauce()
.何かが起き get_sauce()
は秘密にしていきたい、公開バージョン get_sauce()
返却の受け入れも設備は、施設内または近辺に。
たるものとする独自のSubversionのサーバーしておりますのでトータルコントロールできるアクセスいてどのようにお考えですか。
Symlinks
私の初めてだと思っていましたがsymlinkingうのではなく、 bar.py
, を提供し、 bar_public.py
なのかもしれませんねや bar_private.py
社内の開発者だけます。残念ながら、symlinksるのが面倒な手仕事となる場合がありんする二十数の民間のモジュールです。
より重要なのは、その管理のSubversion authzファイルをくこととなるが、各モジュールを守りたいのは例外を追加する必要がある、サーバーにコピーします。人が忘れられないこと、誤ってチェックの秘密...その後、モジュールでは、レポ-レートとしての再生リポジトリのない外んダウンロードでそれを知ることができるからです。
複数のリポジトリ
次のだと思っていましたがって二つのリポジトリ:
private
└── trunk/
├── __init__.py
└── foo/
├── __init__.py
└── bar.py
public
└── trunk/
├── __init__.py
└── foo/
├── __init__.py
├── bar.py
├── baz.py
└── quux.py
そのシェイプ内部でのみ開き貸出も private/
や public/
.内部プレートの設定 PYTHONPATH=private/trunk:public/trunk
, なんだったように感じたので同じセット PYTHONPATH=public/trunk
.その後、関係者と外部とで from foo import bar
および、正しい知識を身につけましょうモジュールですよね?
ましょう:
% PYTHONPATH=private/trunk:public/trunk python
Python 2.5.1
Type "help", "copyright", "credits" or "license" for more information.
>>> import foo.bar
>>> foo.bar.sauce()
'a private bar'
>>> import foo.quux
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named quux
したらいいと思います。Pythonの専門家ではあるが、このPythonいても構わない"と語ったが、約モジュール foo
-検索の対比でみれば:
>>> foo
<module 'foo' from '/path/to/private/trunk/foo/__init__.py'>
なものを削除 foo
す:
>>> import sys
>>> del foo
>>> del sys.modules['foo']
>>> import foo.quux
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named quux
で提供するコースだったより良いソリューションまたは提案?
解決
__ init __
メソッド内 foo
パッケージの __ path __
を変更して、他のディレクトリでモジュールを探すことができます。
secret
というディレクトリを作成し、プライベートSubversionリポジトリに配置します。 secret
に独自の bar.py
を入れます。パブリック foo
パッケージの __ init __。py
に次のようなものを入れます:
__path__.insert(0,'secret')
これは、プライベートリポジトリを所有しているユーザーにとって、 secret
ディレクトリが所有権を持つ bar.py
を foo.bar
secret
は、検索パスの最初のディレクトリです。他のユーザーの場合、Pythonは secret
を検出せず、 __ path __
の次のディレクトリに見えるため、通常の bar.py
を foo
。
つまり、次のようになります。
private
└── trunk/
└── secret/
└── bar.py
public
└── trunk/
├── __init__.py
└── foo/
├── __init__.py
├── bar.py
├── baz.py
└── quux.py
他のヒント
利用には何らかのプラグインシステム及びプラグインの自己ても公開のプラグインを取得する出荷を開きます。
プラグインシステムに溢れる.で簡単に死簡単なものである。だいたいものより高度なものZopeコンポーネント設計もあり、オプションのようなsetuptools entry_points。
あるお客様にご利用の場合でも第二の質問です。
Flask のドキュメントを読んだときに気づいた代替ソリューションを次に示します。
flaskext / __ init __。py
このファイルの唯一の目的は、パッケージを名前空間パッケージとしてマークすることです。これは、異なるPyPIパッケージの複数のモジュールが同じPythonパッケージに常駐できるようにするために必要です。
__import__('pkg_resources').declare_namespace(__name__)
そこで何が起こっているのかを正確に知りたい場合、どのように機能するかを説明する配布またはセットアップツールのドキュメントをチェックしてください。