簡體   English   中英

我怎樣才能在python中使用通用代碼?

[英]How can I use common code in python?

我目前正在維護自己的兩個應用程序。 它們共享一些共同的方面,因此,共享一些代碼。 到目前為止,我剛剛將模塊從一個項目復制到另一個項目,但現在它已成為一個維護問題。 我寧願在兩個項目之外的一個地方使用公共代碼,它們都可以導入。 然后,對公共代碼的任何更改都將反映在兩個項目中。

我的問題是:我該怎么做? 我是否使用此代碼創建了一個庫? 如果是這樣,依賴項目如何使用庫? 我認為我在這里遇到的一件事是公共代碼對其他任何人都沒有用,或者至少,我不想讓它成為其他人可以使用的支持模塊。

如果我的問題不明確,請告訴我。

你不需要做什么特別的事情,Python只需要找到你的模塊。 這意味着您必須將公共模塊放入PYTHONPATH ,或者將它們的位置添加到sys.path 看到這個。

說你有

~/python/project1
~/python/project2
~/python/libs/stuff.py
~/python/libs/other.py

你可以在你的os環境中設置PYTHONPATH='~/python/libs' ,或者你可以做

import sys, os
sys.path.append(os.path.expanduser('~/python/libs')) # or give the full path

之后,您可以在任何地方import stuff, other

你也可以打包你的東西,然后你需要這樣的布局:

~/python/project1
~/python/project2
~/python/libs/mylibname/__init__.py
~/python/libs/mylibname/stuff.py
~/python/libs/mylibname/other.py

~/python/libs/mylibname/__init__.py必須存在,但它可以是一個空文件。 它將mylibname變成一個

將libs文件夾添加到您的路徑后,您可以from mylibname import stuff, other

有很多方法可以對代碼進行分解,因此它是可重用的。 這取決於你的具體情況,哪種方法效果最好。 將代碼分解為單獨的包和模塊總是一個好主意,因此相關代碼保持捆綁在一起,可以從其他包和模塊中重用。 將代碼分解為模塊中的類也可以幫助將相關代碼組合在一起。

我會說將公共代碼放入PYTHONPATH上的模塊或包中並且可用於兩個應用程序可能是您的最佳解決方案。

我是這樣做的:

  • 制作您共同項目的EGG檔案:

     ~:zip common.egg common 
  • 使egg文件成為您庫的一部分

     cp common.egg PROJECT_PATH/lib/ 
  • 在你的項目中:

     import glob import os def main(): path_lib=os.path.abspath(os.path.split(os.path.abspath(sys.modules['__main__'].__file__))[0] + '/../lib') sys.path += glob.glob(path_lib + '/*.egg') from common import stuff stuff.doCommonStuff() 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM