2015-08-25 98 views
2

我做了不同的目錄加載插件基於插件的程序,這是該目錄中的一個的模塊所在(在地方進行測試的源代碼庫中運行的方便)。包含目錄與setuptools的安裝

我想插件目前在源代碼庫與模塊進行安裝,使他們在默認情況下在任何安裝加載。這最好存儲在setup()創建的蛋中。

目前是源代碼庫的重要組成部分如下:

/path/to/repo/ 
    plugins/ 
     example.py 
    myprog.py # the module 
    myprog # the script 
    setup.py 

setup.py看起來是這樣的:

from setuptools import setup 

setup(
    name = 'myprog', 
    version = '1.0', 
    scripts = ['myprog'], 
    py_modules = ['myprog'], 

    package_data = { 
     '': ['plugins/'] 
    } 
) 

然而,plugins目錄中不包含安裝在任何方面。

我怎麼能包括它使該行

os.path.join(os.path.dirname(os.path.realpath(__file__)), 'plugins') 

將正確查找運行python3 setup.py install後,該目錄?

+0

添加此路徑'sys.path.append(os.getcwd()+ '/插件')'來myprog.py或在哪裏可以打電話? – dsgdfg

+0

不要定義靜態路徑! – dsgdfg

+0

添加靜態路徑不會解決問題。我想要一個文件包含在安裝中。更改程序以查看其原始位置不是有效的解決方案。 – 2mac

回答

1

你的設置將通過使全球plugins模塊,每個人都能夠導入打破東西,或者說每個人都錯誤地導入。不要這樣做。相反,請這樣做:

  • 將您的myprog.py文件放入包中。最簡單的方法:mkdir myprog; mv myprog.py myprog/__init__.py
  • 然後,你可以將你的插件移動到一個子包中。 touch plugins/__init__.py; mv plugins myprog/
  • 使用子包,您根本不必使用包數據。
  • 要訪問您的插件,只是做import myprog.plugins.foo名爲foo.py插件。
  • 另外:不要碰__file__,用pkg_resources代替。
  • 獎勵積分:use entry points您的腳本。
+0

如果該目錄中的文件不一定是源文件,如語言包或圖像,該怎麼辦?如何保證該目錄將被包含在內,並且安裝後模塊將能夠使用相對路徑查看這些文件? – 2mac

+0

@ 2mac:在這一點上,你可以使用'package_data = {'myprog':['plugins/*'}'。確保將你的文件添加到'MANIFEST.in'(谷歌爲該名稱)。我認爲'include_package_data'也可能工作。 (另外,你需要用'包= [ 'MYPROG', 'myprog.plugins']來代替'py_modules = [ 'MYPROG']''或使用'find_packages()'函數從setuptools的。 –

+0

將那些被列入根據文檔,'package_data'和'MANIFEST.in'只聲明瞭要包含在源代碼發佈中的內容,它們需要與模塊一起安裝,以便它們可以作爲數據文件訪問。 – 2mac

相關問題