質問

おそらくテスト駆動開発で、小規模/中規模の Python プロジェクトを開始しています。私のバックグラウンドは Python よりも C と Java です (Ant と Makefile を使用しました)

Python ではビルド ツールが必要ないかもしれないことはわかっていますが、私は cython と PyInstaller を使用するのでそうします (Python に直接依存せずに、いくつかの異なる UNIX で動作するはずです)。 CLI からのテストの選択、ドキュメントの構築、依存関係の確認など。

誰か Python には make のようなツールが欠けていると不満を漏らしています。次のようなツールがほとんど存在しないことは知っています スコン そして 舗装業者, しかし、ウェブサイトだけでなく実際のユーザーの意見も聞きたいです。誰か使ってる人いる? 舗装業者?

多くのパッケージに付属する通常の setup.py についてはどうすればよいでしょうか?一般的な使用法があるかどうかをいくつか調べましたが、興味深いものは見つかりませんでした(間違った例を使用した可能性があります)

少なくとも最初は、すでに知っているもの (ant と Makefile) に固執することをお勧めしますか?もしそうなら、Python に推奨する Ant 拡張機能 (+cython+pyinstaller+pyUnit) はありますか?


編集:jwp のようなさらなる回答を避けるために、このプロジェクトでは、プログラムが絶対にスタンドアロンの実行可能ファイルである必要があることに注意してください。 不可能 実行可能ファイルが実行されるターゲット プラットフォーム上に Python VM を配置します。コンパイルに使用できるまったく同じハードウェアがあるので、幸いなことにクロスコンパイルする必要はありません (ただし、開発はより使いやすい Linux で行います)。

また、時期尚早な最適化ではなく、コードが最初から Cython でコンパイルされるかどうかをテストしたいと思っていますが、互換性のない機能を使用しすぎないようにするためです。Cython の場合は、面倒なリファクタリングが必要になります。真剣に必要とされるだろう。

それでは、私の実際の質問に集中してください

役に立ちましたか?

解決

あなたの要件が示唆むしろ sconsのに、彼らのウェブサイトによると、建物のさまざまなタスクをより詳細に制御を持っています舗装をより。後者では、通常のコマンドラインプログラムを実行しますsh()の多くを使用して終了です。

は最近、私はドキュメンテーションを構築し、テストを実行するために舗装の本当に素晴らしいですこれを使用して開始しましたスフィンクスので、私は唯一の純粋なPythonのを使用しています。 あなたは舗装で可能な何を見たい場合は、私は非常にそれらの2件の記事をお勧めします。 変換-からメークツー舗装書き込みtechnical-ドキュメントダグ・ヘルマンでとあなたは間違いなく彼のpavement.py を確認したいです設定ファイルでます。

他のヒント

それがすべてで可能であるならば、私は初めでの拡張モジュール(C / cythonが)を避けることをお勧めしたいです。 Pythonで書かれたあなたのすべてのコードを取得し、簡単な distutils のベースの構成を使用し、 -m使用してテストを実行します(python -m mypkg.test.testall、または何を、インポート unittest を)。

あなたが快適な状態にプロジェクトを取得したら、

、その後、cython及びその付属しています余分なプロジェクト管理といくつかの最適化に取り組んで開始します。 distutilsのは、拡張モジュールを構築することができますので、私はあなたが/ sconsの..

作る必要がありますか分かりません
 project-dir/
  setup.py
  mypkg/
   __init__.py
   mymod.py
   test/
    __init__.py
    testall.py
    testsomething_specific.py

私は、より複雑なため、時にはアリとの組み合わせで、このために setuptoolsのに使用してきましたもの、または他のビルドと統合するため。一般的に、それは私のためによく働いたが、私は、このパッケージのために一般的に低いソース品質文句#python(freenodeの)で何人かの人々を聞いて、標準の<のhref = "HTTP勧告しました://docs.pythonを。 ORG / distutilsの/」のrel = "nofollowをnoreferrer"> distutilsのを。

は本当にあなたが(私のような)は、Javaに使用されている場合に注意すべきことの一つは、Pythonは、分割パッケージをサポートしていないということです。それはあなたが、SRC2 /サイト/ビューでのsrc /サイト/ DB、site.viewでsite.dbを入れPYTHONPATHにsrcとsrc2のを入れて、すべてが動作することを期待することはできません。これは、ビルドツールで私のための主要な頭痛を引き起こし、それは少し散発的に働いていた:)

私は大好き一つのツールはvirtualenvのです: http://pypi.python.org/pypi/virtualenv

サイトから: のそれが何をしますか virtualenvのは、孤立したPython環境を作成するためのツールです。 アドレス指定されている基本的な問題は、依存関係とバージョン、および間接的なアクセス許可の一つです。あなたは今libfooのバージョン1が必要ですが、他のアプリケーションがどのようにこれらのアプリケーションの両方を使用することができますバージョン2を必要とするアプリケーションを持っている想像してみて?あなたが/usr/lib/python2.4/site-packages(またはものは何でもあなたのプラットフォームの標準場所がある)にすべてをインストールする場合、それはあなたが意図せずにアップグレードすべきでないアプリケーションをアップグレードする状況で終わるのは簡単です。

また、試すことができます: http://pypi.python.org/pypi/zc。増築する

サイトから: のビルドアウトプロジェクトはアプリケーション、特にPythonアプリケーションを作成するためのサポートを提供します。これは、複数の部品、Pythonやそれ以外からアプリケーションを組み立てるためのツールを提供しています。アプリケーションは、実際には複数のプログラム、プロセス、および構成設定を含めることができます。

多分それはあなたのニーズにあまりにも多くのですが、開発envrionmentsを導入するための優れた時代のカップル、それを試してみました。

私はまた、鼻は非常にクールなテストツールであることを場所のカップルで語らと読まれてきました http://somethingaboutorange.com/mrl/projects/nose/0.11.1/ 、私はそれをしようとするいくつかの自由な時間を探しています。

これがお役に立てば幸いです 乾杯、 エール

jwpのようなさらなる回答を避けるために、このプロジェクトでは、実行可能ファイルが実行されるターゲットプラットフォーム上にPython VMを置くことは絶対に不可能であるため、プログラムをスタンドアロンの実行可能ファイルにする必要があることに注意してください。コンパイルに使用できるまったく同じハードウェアがあるので、幸いなことにクロスコンパイルする必要はありません (ただし、開発はより使いやすい Linux で行います)。

また、時期尚早な最適化ではなく、コードが最初から Cython でコンパイルされるかどうかをテストしたいと思っていますが、互換性のない機能を使用しすぎないようにするためです。Cython の場合は、面倒なリファクタリングが必要になります。真剣に必要とされるだろう。

スタンドアロンの実行可能ファイルだけを探している場合は、Cython を実行する必要はありません。これを行うための優れたライブラリがいくつかあります。

ただし、Python コードを実行するには、次のようにするだけです。 しなければならない インタープリタまたは仮想マシンを何らかの形式または方法でターゲット マシンにインストールします。私が提示した解決策では、インストールを容易にするためにインタープリターを埋め込むだけです。実際、Cython ではスタンドアロンの実行可能ファイルのビルドは許可されないと私は確信しています (ただし、間違っている可能性もあります)。これは主に、Python インタープリターの拡張機能を作成することを目的としています。

ただし、他にもいくつかの代替手段があります。ターゲット マシンに Java インタープリタがある場合は、次のコマンドを実行できます。 ジトン. 。もあります アイアンパイソン .net用。ただし、これらの言語のランタイムをプロジェクトとともに配布する必要があります。

つまり、依存関係のないスタンドアロンの実行可能ファイルが必要な場合、唯一の選択肢は、ほぼストレートな C または C++ を使用することです。

あなたが簡単なのpythonベースのビルドツールを探している場合。 pynt にチェックしてください。 pynt の中のタスクは、ちょうど(装飾された)Pythonの関数です。また、タスクに渡すレーキstyleパラメータをサポートしています。

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