gpt4 book ai didi

python-3.x - 如何使用同名的 setuptools 包和 ext_modules?

转载 作者:行者123 更新时间:2023-12-05 04:00:28 25 4
gpt4 key购买 nike

我的 Python C 扩展项目的文件结构如下:

.
├── setup.py
├── source
   ├── cppimplementation
   │   └── fastfile.cpp
   └── fastfilepackage
   ├── __init__.py
   └── version.py

我使用以下 setup.py 文件:

from setuptools import setup, Extension

setup(
name= 'fastfilepackage',
version= '0.1.1',
package_dir = {
'': 'source',
},

packages = [
'fastfilepackage',
],

ext_modules= [
Extension(
'fastfilepackage',
[
'source/cppimplementation/fastfile.cpp',
]
)
],
)

我安装它们:

$ pip3 --version
pip 19.1.1 (python 3.6)

$ python3 --version
Python 3.6.7

$ pip3 list
Package Version
---------------------- -------------
wheel 0.33.1
setuptools 40.8.0
...

fastfilepackage$ pip3 install .

问题是,当我安装它时,我的 Python C 扩展模块被 fastfilepackage/version.pyfastfilepackage/__init__.py 覆盖,即在安装之后它,我得到了以下信息:

import fastfilepackage
print( dir( fastfilepackage ) )
# prints ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
# '__name__', '__package__', '__path__', '__spec__', '__version__',
# 'version']

source/cppimplementation/fastfile.cpp 没有导出 FastFile 类,但它有 fastfilepackage/version.pyfastfilepackage/__init__.py 文件。

这是安装的文件结构:

.
└── dist-packages
├── fastfilepackage
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   └── version.cpython-36.pyc
│   └── version.py
├── fastfilepackage-0.1.1.dist-info
│   ├── INSTALLER
│   ├── LICENSE.txt
│   ├── METADATA
│   ├── RECORD
│   ├── top_level.txt
│   └── WHEEL
└── fastfilepackage.cpython-36m-x86_64-linux-gnu.so

但是如果我从我的设置文件中删除 package_dir = { '': 'source', },packages = [ 'fastfilepackage', ], 行,然后,我的 Python C 扩展模块已正确安装:

import fastfilepackage
print( dir( fastfilepackage ) )
# prints ['FastFile', '__doc__', '__file__', '__loader__', '__name__',
# '__package__', '__spec__']

即,它具有由 source/cppimplementation/fastfile.cpp 导出的 FastFile 类,但它没有 fastfilepackage/version.pyfastfilepackage/__init__.py 文件。

这是安装的文件结构:

.
└── dist-packages
├── fastfilepackage-0.1.1.dist-info
│   ├── INSTALLER
│   ├── LICENSE.txt
│   ├── METADATA
│   ├── RECORD
│   ├── top_level.txt
│   └── WHEEL
└── fastfilepackage.cpython-36m-x86_64-linux-gnu.so

如何在我的 setup.py 下放置 ext_modulespackages 以使用相同的包名称而不用一个覆盖另一个?

最佳答案

你不能。第一个导入的获胜。你不能有同名的脚本/模块/包/扩展——一个覆盖所有其他的。

但是你可以将一个放在另一个里面。将你的扩展命名为fastfilepackage.fastfilepackage,你可以import fastfilepackage导入Python包,import fastfilepackage.fastfilepackage导入扩展;或 from fastfilepackage import fastfilepackage

关于python-3.x - 如何使用同名的 setuptools 包和 ext_modules?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56244851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com