2011-02-28 160 views
3

我正在使用多個應用程序(python模塊)的django項目。大多數這些Python模塊由其他人在他們自己的git存儲庫中維護。我用的是混帳子模塊命令將它們導入到我的項目「應用程序」目錄下,像這樣:Django,Python模塊和Git子模塊

mysite/ 
mysite/apps 
mysite/apps/django-extensions 
mysite/apps/django-celery 
mysite/apps/django-comments 
mysite/apps/myapp 
...etc 

大多數的子模塊(帶Django的擴展爲例)有一個包含實際的Python模塊的子文件夾: mysite/apps/django-extensions/django_extensions

這意味着我不能簡單地將我的python路徑設置爲包含mysite/apps - 我必須將它設置爲包含mysite/apps/django-extensions,以便它可以導入django_extensions子文件夾。

這很煩人的打字:

PYTHONPATH=mysite/apps/django-extensions:mysite/apps/django-celery... python manage.py runserver 

是否有更簡單的方法,我應該鋪設了我的回購?更簡單的過程? 只是爲了好玩,我嘗試了一個mysite/apps/*的PYTHONPATH,但沒有奏效。

回答

0

你可以試試看看倉庫中想要的部分嗎?因此,如果他們在您正在檢查的內容中​​包含實際代碼,請不要檢查額外的部分。

因此,而不是得到Django的擴展獲取Django的擴展/ Django的擴展。

編輯:我相信this是你以上可以做的。另外,我相信你可以在第一個django-extensions目錄下添加一個__init__.py,但是你將不得不爲你的導入添加額外的django-extensions(__init__.py告訴python它是一個包)。雖然我認爲這可能有效,但我會建議拍攝我的第一個例子。

+0

雖然git現在在版本1.7中支持稀疏檢出,但它不會影響路徑。我想我可能只需要添加一些東西到我的__init__.py中,通過mysite/apps/*掃描並將這些目錄添加到python路徑中。 – 2011-02-28 00:56:03

1

您可以將這些路徑放在dependencies.pth文件中,並且只有.pth位於您的路徑中。在你的site-packages/dist-packages中有一些例子。

5

在互聯網上空白了之後,我一起攻擊了這個解決方案。這是直線前進和工作得很好:

#At the top of settings.py 
import sys, os 
git_sub_modules = '/path/to/dir/containing/submodules' #Relative paths ok too 
for dir in os.listdir(git_sub_modules): 
    path = os.path.join(git_sub_modules, dir) 
    if not path in sys.path: 
     sys.path.append(path) 

時間的推移

更新:它更容易使用的virtualenv和/或類似的東西dokku部署應用程序。我不再使用這個。儘管結賬需要「調整」並在項目中使用它們的第三方應用程序仍然很痛苦。

8

這是錯誤的做法。不要在他們自己的項目文件中安裝其他人的第三方代碼。相反,創建一個virtualenv,並直接使用pip安裝代碼。

+1

使用git子模塊檢查django項目的所有組件有什麼問題?對我來說更容易遵循上游,看到突破性的變化,針對特定的版本等等......對於我來說,使用git來管理我的資源,然後學習virtualenv和pip並不是什麼好處。管理所有人...另外,測試人員更容易做到「混帳」; git submodule update --init --recursive'。 – 2011-03-01 02:38:09

+0

我同意,過去一直對此感到沮喪。有一個git擴展名,可以讓你映射來自遠程倉庫(git子樹)的導向器,但它的錯誤和難以維護。 Daniel所建議的似乎是'標準'方法,儘管由於你上面提到的原因,它似乎只是你提出的(體面的)解決方案的一大破解。我會嘗試你的方法。 – 2012-08-13 13:29:56