distutils
模塊允許使用Python模塊包含和安裝資源文件。如果在構建過程中應該生成資源文件,如何正確包含它們?如何在setup.py中執行自定義生成步驟?
例如,該項目是一個Web應用程序,其中包含應編譯爲JavaScript幷包含在Python包中的CoffeeScript源代碼。有沒有辦法將其整合到普通的sdist/bdist過程中?
distutils
模塊允許使用Python模塊包含和安裝資源文件。如果在構建過程中應該生成資源文件,如何正確包含它們?如何在setup.py中執行自定義生成步驟?
例如,該項目是一個Web應用程序,其中包含應編譯爲JavaScript幷包含在Python包中的CoffeeScript源代碼。有沒有辦法將其整合到普通的sdist/bdist過程中?
最好的方法是編寫一個自定義的build_coffeescript命令,並使其成爲構建子命令。更多細節給其他答覆類似/重複的問題,比如這一個:
我花了一個公平,同時搞清楚了這一點,提出的各種建議在那裏以各種方式被打破 - 他們打破安裝依賴的,或者他們不PIP工作,等等。這裏是我的解決方案:
在setup.py:
from setuptools import setup, find_packages
from setuptools.command.install import install
from distutils.command.install import install as _install
class install_(install):
# inject your own code into this func as you see fit
def run(self):
ret = None
if self.old_and_unmanageable or self.single_version_externally_managed:
ret = _install.run(self)
else:
caller = sys._getframe(2)
caller_module = caller.f_globals.get('__name__','')
caller_name = caller.f_code.co_name
if caller_module != 'distutils.dist' or caller_name!='run_commands':
_install.run(self)
else:
self.do_egg_install()
# This is just an example, a post-install hook
# It's a nice way to get at your installed module though
import site
site.addsitedir(self.install_lib)
sys.path.insert(0, self.install_lib)
from mymodule import install_hooks
install_hooks.post_install()
return ret
然後,在您的來電設置功能,通過ARG:
cmdclass={'install': install_}
您可以用同樣的理念,爲構建,而不是安裝,自己寫一個裝飾,使其更容易等,這已通過PIP進行了測試,並直接「蟒蛇的setup.py安裝」調用。
心連心 一個
http://stackoverflow.com/q/11331175/150999 http://stackoverflow.com/a/1321345/150999 – Sam
兩年後應該有足夠的時間來重新格式化響應被標記爲正確的答案。 – erikbwork
隨意編輯答案。 –