为什么setuptools不会在distutils的情况下复制我的文件?

时间:2015-04-10 14:42:30

标签: python flask setuptools distutils setup.py

我不太了解setuptools的行为。

我有一个小包,其中有一些静态文件在fly中生成,使用内部Flask框架,用于一个简单的临时Web服务器。一切都在当地很好用。我设法得到setup.py脚本来处理重载构建命令并添加几行。现在当我使用:python setup.py install或build时,一切正常。我的静态文件被复制到virtualenv内的正确目录:env / lib / python3.4 / site-packages / mypackage,同时生成文件MyPackage-0.0.1-py3.4.egg-info,一切正常。< / p>

但现在我意识到我需要/想要'install_requires','setup_requires','test_requires'的功能,并且需要更换我的 来自disutils.core导入设置 至 来自setuptools导入设置 一切都停止了。 setuptools不是处理我的静态文件,而是构建包含所有内容的大型二进制egg文件。 setup.py stdout告诉我我的文件实际上在里面,在vim中滚动二进制文件也让我相信我的文件在里面。但是我的脚本或Flask核心都无法读取它们。 open函数给定正确的(我认为)路径抛出NotvirectoryError poit at env / lib / python3.4 / site-packages / MyPackage-0.0.1-py3.4.egg / mypackage / static / file.txt。我明白给这样的路径应该自动解压缩egg文件并给我内容。我可以理解我缺乏经验,但Flask核心正在尝试完全相同的事情并且在同一点上完全失败。所以问题是我做错了什么?当我切换回distutils.core时,一切都恢复正常。

我知道这就是setuptools的工作方式,但无法访问我的静态文件并不是我想要的。我可以为我的代码编写解决方法,并在fly中解压缩文件,但我不认为这是正确的方法。另外,我可能无法为每个使用我的静态文件的外部程序包编写变通方法(例如Flask)。

我将不胜感激任何建议,链接或提示。我试图读取distutils和setuptools源文件并找到一些配置选项,但我不希望最终用户被迫以非标准方式安装我的包。我想要实现的是键入'python setup.py install'并隐藏我的包中的所有内容。

1 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 使用zip_safe=False关键字参数
  2. 将您的包标记为不是zip安全的
  3. 使用setuptools pkg_resources API访问资源。