簡體   English   中英

setup.py 不安裝數據文件

[英]setup.py not installing data files

我有一個 Python 庫,除了常規的 Python 模塊外,還有一些數據文件需要放在 /usr/local/lib/python2.7/dist-package/mylibrary 中。

不幸的是,我一直無法說服 setup.py 在那里實際安裝數據文件。 請注意,此行為處於安裝狀態 - 而不是 sdist。

這是 setup.py 的略微編輯版本

module_list = list_of_files

setup(name         ='Modules',
      version      ='1.33.7',
      description  ='My Sweet Module',
      author       ='PN',
      author_email ='email',
      url          ='url',
      packages     = ['my_module'],

# I tried this. It got installed in /usr/my_module. Not ok.

      # data_files   = [ ("my_module",  ["my_module/data1",
      #                                  "my_module/data2"])]

# This doesn't install it at all.
      package_data = {"my_module" : ["my_module/data1",
                                     "my_module/data2"] }
     )

這是在 Python 2.7 中(最終必須在 2.6 中運行),並且必須在 10.04 和 12+ 之間的某些 Ubuntu 上運行。 現在在 12.04 上開發它。

UPDpackage_data接受格式為{'package': ['list', 'of?', 'globs*']}字典,因此要使其工作,應該指定相對於包目錄的 shell globs,而不是相對於文件路徑到分布根。

data_files具有不同的含義,通常應避免使用此參數。

使用 setuptools 你只需要include_package_data=True ,但數據文件應該在版本控制系統下,setuptools知道(默認情況下它只識別CVS和SVN,如果你使用git或hg,安裝setuptools-gitsetuptools-hg hg...)


使用設置工具,您可以:

- 在 MANIFEST.im 中:

 include my_module/data*

- 在 setup.py 中:

    setup(
        ...
        include_package_data = True,
        ...
    )

http://docs.python.org/distutils/setupscript.html#installing-additional-files

如果 directory 是相對路徑,則相對於安裝前綴(Python 的 sys.prefix 用於純 Python 包, sys.exec_prefix 用於包含擴展模塊的包)進行解釋。

這可能會做到:

data_files   = [ ("my_module",  ["local/lib/python2.7/dist-package/my_module/data1",
                                 "local/lib/python2.7/dist-package/my_module/data2"])]

或者只是使用 join 添加前綴:

data_dir = os.path.join(sys.prefix, "local/lib/python2.7/dist-package/my_module")
data_files   = [ ("my_module",  [os.path.join(data_dir, "data1"),
                                 os.path.join(data_dir, "data2")])]

以下解決方案對我來說效果很好。 您應該在 setup.py 所在的位置有 MANIFEST.in 文件。

將以下代碼添加到清單文件中

recursive-include mypackage *.json *.md # can be extended with more extensions or file names. 

另一種解決方案是將以下代碼添加到 MANIFEST.in 文件中。

graft mypackage # will copy the entire package including non-python files. 
global-exclude __pyache__ *.txt # list files you dont want to include here. 

現在,當您執行 pip install 時,將包含所有必需的文件。

希望這可以幫助。

更新:確保您在安裝文件中也有include_package_data=True

暫無
暫無

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

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