setuptools:从 zip 中删除 lib/python3.5/site-packages 前缀 [英] setuptools: remove lib/python3.5/site-packages prefix from zip

查看:99
本文介绍了setuptools:从 zip 中删除 lib/python3.5/site-packages 前缀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个应作为 zip 文件分发的包,该包仅包含包本身.不幸的是,至少当从 virtualenv 运行时,zip 包含冗长的子目录.这是项目的文件结构:

<预><代码>.├── my_package│ └── __init__.py├── README.md└── setup.py

setup.py 包含:

from setuptools import setup, find_packages设置(name='my_package',版本='1.0.0',作者='我的名字',author_email='my-email@example.com',包=find_packages('.'),data_files=[('my_package', ['README.md'])],zip_safe=真,)

当我运行 python setup.py bdist_dumb --format zip --relative 时,我得到以下输出:

运行 bdist_dumb运行构建运行 build_py创建构建创建构建/库创建 build/lib/my_package复制 my_package/__init__.py ->构建/lib/my_package安装到 build/bdist.linux-x86_64/dumb运行安装运行 install_lib创建 build/bdist.linux-x86_64创建 build/bdist.linux-x86_64/dumb创建 build/bdist.linux-x86_64/dumb/home创建 build/bdist.linux-x86_64/dumb/home/sybren创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package复制 build/lib/my_package/__init__.py ->build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package字节编译 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package/__init__.py 到 __init__.cpython-35.pyc运行 install_data创建 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/my_package复制 README.md ->build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/my_package运行 install_egg_info运行 egg_info创建 my_package.egg-info编写 my_package.egg-info/PKG-INFO将dependency_links 写入my_package.egg-info/dependency_links.txt将顶级名称写入 my_package.egg-info/top_level.txt编写清单文件my_package.egg-info/SOURCES.txt"读取清单文件my_package.egg-info/SOURCES.txt"编写清单文件my_package.egg-info/SOURCES.txt"将 my_package.egg-info 复制到 build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-信息运行 install_scripts创建/home/sybren/workspace/packaging-test/dist创建/home/sybren/workspace/packaging-test/dist/my_package-1.0.0.linux-x86_64.zip"并添加."给它添加lib/python3.5/site-packages/my_package/__init__.py"添加lib/python3.5/site-packages/my_package/__pycache__/__init__.cpython-35.pyc"添加lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/dependency_links.txt"添加lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/PKG-INFO"添加lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/top_level.txt"添加lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/SOURCES.txt"添加lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/zip-safe"添加my_package/README.md"删除build/bdist.linux-x86_64/dumb"(及其下的所有内容)

如您所见,它将包放在 lib/python3.5/site-packages 中,这是我不想要的.我只希望包包含 my_package/*.

如果我们可以防止 my_package*.egg-info/* 被打包,那就更好了,但我的主要问题是摆脱 lib/python3.5/site-包前缀.

解决方案

这似乎提供了我正在寻找的行为.但是,如果有更优雅的解决方案,例如通过将某些参数传递给 setup(),我会很高兴听到这个消息.

from setuptools import setup, find_packages从 setuptools.command.install 导入安装类自定义安装(安装):"""确保模块位于 zip 文件的根目录."""def initialize_options(self):super().initialize_options()self.prefix = ''self.install_lib = ''设置(cmdclass={'install': CustomInstall},name='my_package',版本='1.0.0',作者='我的名字',author_email='my-email@example.com',包=find_packages('.'),data_files=[('my_package', ['README.md'])],zip_safe=真,)

I'm trying to create a package that should be distributed as a zip file, containing only the package itself. Unfortunately, at least when run from a virtualenv, the zip contains lengthy subdirectories. This is the file structure of the project:

.
├── my_package
│   └── __init__.py
├── README.md
└── setup.py

setup.py contains:

from setuptools import setup, find_packages

setup(
    name='my_package',
    version='1.0.0',
    author='my name',
    author_email='my-email@example.com',
    packages=find_packages('.'),
    data_files=[('my_package', ['README.md'])],
    zip_safe=True,
)

When I run python setup.py bdist_dumb --format zip --relative, I get the following output:

running bdist_dumb
running build
running build_py
creating build
creating build/lib
creating build/lib/my_package
copying my_package/__init__.py -> build/lib/my_package
installing to build/bdist.linux-x86_64/dumb
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/dumb
creating build/bdist.linux-x86_64/dumb/home
creating build/bdist.linux-x86_64/dumb/home/sybren
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package
copying build/lib/my_package/__init__.py -> build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package
byte-compiling build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package/__init__.py to __init__.cpython-35.pyc
running install_data
creating build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/my_package
copying README.md -> build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/my_package
running install_egg_info
running egg_info
creating my_package.egg-info
writing my_package.egg-info/PKG-INFO
writing dependency_links to my_package.egg-info/dependency_links.txt
writing top-level names to my_package.egg-info/top_level.txt
writing manifest file 'my_package.egg-info/SOURCES.txt'
reading manifest file 'my_package.egg-info/SOURCES.txt'
writing manifest file 'my_package.egg-info/SOURCES.txt'
Copying my_package.egg-info to build/bdist.linux-x86_64/dumb/home/sybren/.virtualenvs/packaging-test/lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info
running install_scripts
creating /home/sybren/workspace/packaging-test/dist
creating '/home/sybren/workspace/packaging-test/dist/my_package-1.0.0.linux-x86_64.zip' and adding '.' to it
adding 'lib/python3.5/site-packages/my_package/__init__.py'
adding 'lib/python3.5/site-packages/my_package/__pycache__/__init__.cpython-35.pyc'
adding 'lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/dependency_links.txt'
adding 'lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/PKG-INFO'
adding 'lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/top_level.txt'
adding 'lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/SOURCES.txt'
adding 'lib/python3.5/site-packages/my_package-1.0.0-py3.5.egg-info/zip-safe'
adding 'my_package/README.md'
removing 'build/bdist.linux-x86_64/dumb' (and everything under it)

As you can see, it puts the package in lib/python3.5/site-packages, which I don't want. I just want the package to contain my_package/*.

If we can prevent my_package*.egg-info/* from being packed, even better, but my primary question is about getting rid of the lib/python3.5/site-packages prefix.

解决方案

This seems to provide the behaviour I'm looking for. However, if there is a more elegant solution, for example by passing certain parameters to setup(), I'd be happy to hear about that.

from setuptools import setup, find_packages
from setuptools.command.install import install


class CustomInstall(install):
    """Ensures the module is placed at the root of the zip file."""

    def initialize_options(self):
        super().initialize_options()
        self.prefix = ''
        self.install_lib = ''

setup(
    cmdclass={'install': CustomInstall},
    name='my_package',
    version='1.0.0',
    author='my name',
    author_email='my-email@example.com',
    packages=find_packages('.'),
    data_files=[('my_package', ['README.md'])],
    zip_safe=True,
)

这篇关于setuptools:从 zip 中删除 lib/python3.5/site-packages 前缀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆