2016-07-19 1 views
2

は、私はこのコードを書いた:差別地元の輸入は

import os 
import helpers 

を、すぐに私は私がこれを読んだとき、後でhelpersは私が書かれているシステムモジュールまたは1であれば、私は不思議に思われるだろうことに気づきましたプロジェクトのディレクトリに置く(私はそれほど覚えていない!:))。

osはシステムモジュールであり、helpersは私のプロジェクトに含まれています。私はその旨のコメントを書くことができましたが、それは素晴らしいことではありません。他の言語は、この対処方法

:Cで

  • を++プロジェクト相対含まれている間、システムが含まれるが<>に囲まれているため、問題は存在しませんが""に囲まれています。

  • この問題に対するC#の解決策は、現在のプロジェクト内のファイルに定義されている機能には、インポートステートメントなしでアクセスできるということです。

編集:私は、プロジェクトローカルモジュールをインポートするためのfrom . import someModule構文を紹介a related PEPを見つけました。私はそれを試してみるつもりです。しかしそれだけでは不十分です。システムモジュールをインポートするために、私はまだ汎用のimport blah構文しか持っていません。

+0

言語に固有の仕組みが必要なのかどうかわかりません。しかし、あなたは 'sys.path'を操作し、インストールされたパッケージかプロジェクト特有のパッケージからのみインポートするコンテキストマネージャを書くことができます。これは可読性に役立ちますが、保守性はPITAになります。 – SuperSaiyan

答えて

1

これまでに私が見たいくつかの企業で、これは単純にインポートステートメントをグループに分け、改行を分割してコーディングしています。

これらのグループは、コアライブラリのインポート、サードパーティのインポート、それに続くファーストパーティのインポートの順です。

だから、グループ化の例は次のようになります:Pythonで多くのものと同様

import os 
import sys 
from argparse import ArgumentParser 

import requests 
import termcolor 

from my_app import my_module1 
from my_app import my_module2 

、このスタイルは、単にコーディング規約です。しかしそれは一般的なものなので、グループ化はほとんどのPython開発者が容易に理解できるはずです。実際には、PEP8でもお勧めです。

これらのインポートをグループ化するプロセスを自動化できるisortという人気のあるツールがあります。

もっと明示的にしたい場合は、同じプロジェクトコードに対して相対インポートを使用できないことはありません。そして、これらのモジュールが同じパッケージから来ていることが100%明確になります。