【问题标题】:Python setuptools: Bad Marshal dataPython setuptools:错误的元帅数据
【发布时间】:2016-06-14 14:18:19
【问题描述】:

当我尝试在 python2 上运行 setup.py install 时,我收到了这个错误的编组数据错误

running install
running bdist_egg
running egg_info
writing requirements to epigrass.egg-info/requires.txt
writing epigrass.egg-info/PKG-INFO
writing top-level names to epigrass.egg-info/top_level.txt
writing dependency_links to epigrass.egg-info/dependency_links.txt
writing entry points to epigrass.egg-info/entry_points.txt
reading manifest file 'epigrass.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching 'ez_setup.py'
warning: no files found matching 'INSTALL'
warning: no files found matching 'README'
no previously-included directories found matching 'demos/outdata-*'
no previously-included directories found matching 'docs/source*'
warning: no previously-included files matching '__pycache__' found under directory '*'
writing manifest file 'epigrass.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
running build_ext
creating stub loader for Epigrass/epimodels.so
byte-compiling build/bdist.linux-x86_64/egg/Epigrass/epimodels.py to epimodels.pyc
installing package data to build/bdist.linux-x86_64/egg
running install_data
copying epigrass.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying epigrass.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying epigrass.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying epigrass.egg-info/entry_points.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying epigrass.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying epigrass.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
writing build/bdist.linux-x86_64/egg/EGG-INFO/native_libs.txt
zip_safe flag not set; analyzing archive contents...
Traceback (most recent call last):
  File "setup.py", line 40, in <module>
    data_files = [('/usr/share/pixmaps',['egicon.png']),('/usr/share/doc/epigrass/demos',demos),('/usr/share/doc/epigrass/',['docs/build/latex/Epigrass.pdf']),('/usr/share/applications',['epigrass.desktop'])]
  File "/usr/lib/python2.7/distutils/core.py", line 151, in setup
    dist.run_commands()
  File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/install.py", line 67, in run
    self.do_egg_install()
  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/install.py", line 109, in do_egg_install
    self.run_command('bdist_egg')
  File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/bdist_egg.py", line 209, in run
    os.path.join(archive_root, 'EGG-INFO'), self.zip_safe()
  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/bdist_egg.py", line 245, in zip_safe
    return analyze_egg(self.bdist_dir, self.stubs)
  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/bdist_egg.py", line 355, in analyze_egg
    safe = scan_module(egg_dir, base, name, stubs) and safe
  File "/usr/local/lib/python2.7/dist-packages/setuptools/command/bdist_egg.py", line 392, in scan_module
    code = marshal.load(f)
ValueError: bad marshal data (unknown type code)

我的 setup.py 看起来像这样:

# -*- coding:utf8 -*-
from setuptools import setup
from Cython.Build import cythonize
from glob import glob
from Epigrass.__version__ import version


demos = glob('demos/*')
try:
    demos.remove('demos/CVS')
except:
    pass

setup(name='epigrass',
      version=version,
      author='Flavio Codeco Coelho, Claudia Torres Codeco',
      author_email='fccoelho@gmail.com',
      maintainer='Flavio Codeco Coelho',
      maintainer_email='fccoelho@gmail.com',
      url='http://epigrass.sourceforge.net',
      description='Epidemiological Geo-Referenced Analysis and Simulation System',
      long_description='EpiGrass is a simulator of epidemics over networks.  Its is a scientific tool created for simulations and scenario analysis in Network epidemiology.',
      download_url='http://sourceforge.net/project/showfiles.php?group_id=128000',
      license='GPL',
      packages=['Epigrass'],
      install_requires=["numpy >= 1.2", "networkx >= 1.1", "SQLAlchemy >= 0.7", "sqlsoup", "redis >= 2.4", "requests", "cython"],
      entry_points={
          'console_scripts': [
              'epirunner = Epigrass.manager:main',
          ],
          'gui_scripts': [
              'epigrass = Epigrass.epigrass:main',
              'epgeditor= Epigrass.epgeditor:main',
              'neteditor= Epigrass.neteditor:main'
          ]
      },
      ext_modules=cythonize('Epigrass/epimodels.py'),
      include_package_data=True,
      package_data={'': ['INSTALL', 'README', 'COPYING', 'epigrass.desktop', '*.rst', '*.tex', '*.png', '*.jpg']},
      data_files = [('/usr/share/pixmaps',['egicon.png']),('/usr/share/doc/epigrass/demos',demos),('/usr/share/doc/epigrass/',['docs/build/latex/Epigrass.pdf']),('/usr/share/applications',['epigrass.desktop'])]
)

【问题讨论】:

  • 亲爱的 fccoelho,发生此错误的主要原因是 .pyc 文件损坏。您能否以 root 身份登录,查找并删除 .pyc 文件并重新运行。寻找 。 -name "*.pyc" -type f -delete ..
  • @DevD 我已经阅读过这个,所以我运行了以下命令:“sudo find /usr -name '*.pyc' -delete”,但之后我仍然遇到同样的错误
  • 您是否尝试过手动对 Epigrass/epimodels.py 进行 cython 转换?
  • stackoverflow.com/questions/21826137/… 。我通常以上述方式添加 cython 转换。
  • 我找到了解决方法:我在 setup.py 中添加了 zip_safe=False

标签: python python-2.7 setuptools


【解决方案1】:

只需要在 setup 调用中添加一个 zip_safe=False 参数即可。

现在可以正常构建了。

【讨论】:

  • 这个答案很有帮助,但包含对 zip_safe 标志用途的解释可能会很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 2011-01-13
相关资源
最近更新 更多