どんなを守る私のPythonコードベースでごを見ることのできな特定のモジュールがいいですか?

StackOverflow https://stackoverflow.com/questions/1443146

質問

今したプロジェクトは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__)
     

そこで何が起こっているのかを正確に知りたい場合、どのように機能するかを説明する配布またはセットアップツールのドキュメントをチェックしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top