Pythonパッケージとその使用



すべての人に良い一日を!







Gitでサブモジュールまたはツリーを使用して外部パッケージを使用して作業を整理するトピックは 、Habréで既に取り上げられています。 これは良い解決策のように見えましたが、実際には不便と混乱をもたらしました。 次に、すべてをpythonパッケージに移植することにしました。 ここで、Djangoアプリケーションの例と共有します。









序文の代わりに



多くの異なるプロジェクトを行うと、モジュール、拡張機能、ユーティリティが蓄積されます。 それらの間で依存関係が確立されます。 そして、プロジェクトの開発と展開のためのインフラストラクチャの便利な組織に疑問が生じます。 より明確にするために、Djangoプロジェクトについて説明します。







Djangoアプリケーションを作成し、pythonパッケージに抽出します。 アプリケーションはニュースを表示します。 サイトの管理部分では、ユーザビリティに関する独自の経験が必要になります。 このため、依存関係でapp-admintoolsパッケージを示します







準備する



Gitosisでapp-newsリポジトリを作成します。







gitosis-admin / gitosis.conf







[group apps] writable = app-news members = @developers @hosts
      
      





変更を送信します。







 git pull
      
      





開始する:







 git clone git@git.home.com:app-news
      
      





パッケージの構造



 +-app-news/ +-home/ +-news/ +-locale/ +-static/ +-templates/ +-__init__.py +-models.py +-urls.py +-views.py +-__init__.py +-MANIFEST.in +-setup.py
      
      





setup.py







 from setuptools import setup, find_packages setup( name='home.news', version='0.1', description='News for Django', author='Elias', namespace_packages=['home'], # line 8 packages=find_packages(), platforms='any', zip_safe=False, include_package_data=True, dependency_links=['git+ssh://git@git.home.com/app-admintools@v0.1#egg=admintools-0.1'], # line 13 install_requires=['admintools==0.1'], # line 14 classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Web Environment', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', 'Framework :: Django', ], )
      
      





ここで、 home名前空間の使用を宣言し(p。8)、リポジトリ内のhome.newsパッケージの依存関係を指定しました( p。13.14 )。







MANIFEST.in







 recursive-include home/*/locale * recursive-include home/*/static * recursive-include home/*/templates *
      
      





マニフェストは、パッケージに必要な追加データを定義します。







home / init .py







 import pkg_resources pkg_resources.declare_namespace(__name__)
      
      





名前空間を登録します。







マスターからリモートブランチv0.1を作成します。







 git push origin master:v0.1
      
      





それだけです! パッケージをインストールする準備ができました:







 pip install git+ssh://git@git.home.com/app-news@v0.1
      
      





または編集モードで:







 pip install -e ./app-news
      
      





またはsetuptoolsを介して:







 python setup.py develop
      
      





ただし、この場合、setuptoolsはこの形式をサポートしていないため、リポジトリへのリンクの形式で依存関係をダウンロードできません。







パッケージ接続



上記の1つの方法を、setup.py依存関係の形式で説明しました。







また、依存関係を別のrequirements.txtファイルに保存すると便利です(たとえば、サイトの場合):







 git+ssh://git@git.home.com/app-news@v0.1
      
      





そして、ピップを介して:







 pip install -r requirements.txt
      
      





おわりに



依存関係管理をGitに移行するというアイデアは不便でした(サブモジュールを使用)。 これは主に、同期を必要とする共通コンポーネントを使用して、2つのプロジェクトで一度にコードを記述してデバッグする必要があるときに明らかになりました。 通常、コミットを通じて。 別の問題は、2人の開発者が同時にパッケージとパッケージへのリンクを更新するときに発生しました。 その結果、重要な移行。 など... しかし、パッケージを編集モードにして、同期せずにコードを編集できるようになりました。 同時に、sshキーでパッケージにアクセスする魅力はすべて残っていました。

この記事が開発を簡素化し、少し幸せになることを願っています:)







幸運を祈ります!








All Articles