在Python egg sdist安装目录中安装静态文件

时间:2014-09-14 18:05:53

标签: python pip setuptools

creating a Python3 application取决于项目中静态文件的目录。

项目结构:

myBlanky
  \__blankys
        \__bootstrap
         |__google_app_engine
  \__my_blanky
       \____init__.py
        |__my_blanky.py
        |__file_system_utils.py
  setup.py
  MANIFEST.in
  README.md
  LICENSE
  .travis.yml
  setup.cfg

所以,在我的根目录中,我有1个Python模块(my_blanky),各种Python项目文件(manifest,setup.py等)和1个充满静态数据的目录(blankys)。

我之前为我的应用程序创建.tar.gz包时遇到了麻烦,但是在创建了一个MANIFEST.in文件并编辑了我的setup.py文件后,我能够使用命令成功创建.tar.gz:{ {1}}。

我的setup.py:

python3 setup.py sdist

我的MANIFEST.in:

from setuptools import setup
from my_blanky import version

setup(name="myBlanky",
      ...url, author, etc info here...
      packages=["my_blanky"],
      include_package_data=True,
      package_data={'blankys': ['blankys/*']},
      zip_safe=False,
      entry_points={"console_scripts": ["myblanky = my_blanky.my_blanky:main"]},
      install_requires=['docopt==0.6.1'])

运行recursive-include blankys * include *.md include LICENSE include setup.cfg 后,我打开创建的.tar.gz文件,它包含了我需要的所有数据(blankys目录,my_blanky模块,所有root目录静态文件),所以它包含了我的所有静态我需要的文件很棒。

然后我开始使用pip:python3 setup.py sdist安装.tar.gz,它运行成功,没有错误。 (安装它的输出不会显示有关静态文件的任何信息,但不认为它会以任何方式执行此操作。)

现在问题就出现了。我的python项目现在应该安装在我的机器上。我可以在我的机器上运行find ./dist -iname "*.tar.gz" -print0 | xargs -0 pip installmyblanky这一切都很有效。一切都在运行。但是当我尝试运行任何试图访问静态文件目录“blankys”的myblanky -v代码时,它会说myblanky list中没有这样的目录。我手动浏览到该位置,其中唯一的文件是我的Python模块/usr/local/lib/python3.4/dist-packages/my_blanky/源文件。父目录:my_blanky根本不包含任何静态文件。

我希望在我安装项目时,静态目录/usr/local/lib/python3.4/dist-packages/会被复制到dist-packages位置。我期望该目录与我的blankys模块目录一起使用,因此我可以使用该静态文件目录在我的程序中搜索相对路径。


因此,如果静态文件很好地安装到我的.tar.gz包中,并且安装似乎在我的机器上成功,那么我的静态文件在已安装的dist-package中的哪个位置?我在.tar.gz上安装了我的机器上的项目,其中包含静态文件/目录,那么为什么那些没有在安装中被复制?只复制python模块my_blanky

1 个答案:

答案 0 :(得分:-1)

我觉得我已经解决了这个问题。

基本上我的问题是我有一个“settings.config”文件,我希望能够在用户的机器上访问系统范围。因此,我没有将settings.config文件放在我的程序找不到的某个随机目录中,而是希望系统上有一个可以查找和操作的settings.config文件,所以我在问题中询问你是怎么回事在distutils这样做。

今天我正在清理机器的主目录时,我意识到我的想法完全错了。应用程序在它可以访问的系统中的某个位置有一个配置文件的时候就会这样做。它位于~/.config/etc或Windows:%APPDATA%。我在上面的问题中询问如何在/usr/local/lib/python3内安装settings.config文件,但这是错误的。这不是我应该做的,就像其他所有程序一样。

所以回答我的问题:你无法在/usr/local/lib/python3中安装数据文件,这是有充分理由的。而是使用~/.config/etc%APPDATA%