如何使用 setuptools 在 Python 3.6 中的库分发中包含父文件夹结构?
How can I include the parent folder structure on a library distribution in Python 3.6 using setuptools?
我正在使用 setuptools 分发 Python 库。我有以下目录结构:
/src
/production
setup.py
/prod-library
/package1
/package2
文件夹结构必须保持这样,因为将来src下会有多个库,需要有自己的setup.py文件。因此,在这种情况下,拥有 1 个父文件夹并移出 setup.py 到根文件夹的传统答案将不起作用。
我在库的 setup.py 中使用以下内容来导出库(正在运行)
package_dir={'': '.'},
packages=find_packages()
项目内部 tar.gz 看起来像这样:
/prod-library
/package1
/package2
但是在 prod-library 包 Python 文件中,引用其他模块的导入需要结构如下:
import src.production.prod-library.package1
import src.production.prod-library.package2
问题:
将其中一个库导入到不同的项目后,出现如下错误:
ModuleNotFoundError: No module named 'src.production'
由于构建仅落入 /prod-library 包,导入代码的项目由于缺少文件夹结构而失败 (src/production),因为构建的分发版只有 /prod-library。
我需要做的是在分发版本中包含 src/production 文件夹,因此生成的 tar.gz 文件如下所示:
/src
/production
/prod-library
/package1
/package2
我不确定如何在构建结构中获取它们,因为它们位于 setup.py 位置之上。如何实现?
如果不能,那么我愿意接受有关修复导入的建议,如果这可以作为解决方案的话。
我找到了问题的解决方案。它与 package_dir 的配置方式有关:
package_dir={'': '.'}
虽然上面的 package_dir 构建了文件并按预期包含了所有子文件夹,egg-info 文件的 SOURCES.txt 不正确并显示如下:
./prod-library/__init__.py
./prod-library/package1/__init__.py
etc...
将包导入另一个 API 时,尝试导入 prod-libary 时找不到导入。package1.file.py
按如下方式更改package_dir后,我可以正常使用库了:
package_dir={'.': ''}
以上有效地删除了 SOURCES.txt 文件中破坏导入的 ./ 前缀。现在 egg-info 的 SOURCES.txt 看起来是正确的:
prod-library/__init__.py
prod-library/package1/__init__.py
etc...
我正在使用 setuptools 分发 Python 库。我有以下目录结构:
/src
/production
setup.py
/prod-library
/package1
/package2
文件夹结构必须保持这样,因为将来src下会有多个库,需要有自己的setup.py文件。因此,在这种情况下,拥有 1 个父文件夹并移出 setup.py 到根文件夹的传统答案将不起作用。
我在库的 setup.py 中使用以下内容来导出库(正在运行)
package_dir={'': '.'},
packages=find_packages()
项目内部 tar.gz 看起来像这样:
/prod-library
/package1
/package2
但是在 prod-library 包 Python 文件中,引用其他模块的导入需要结构如下:
import src.production.prod-library.package1
import src.production.prod-library.package2
问题: 将其中一个库导入到不同的项目后,出现如下错误:
ModuleNotFoundError: No module named 'src.production'
由于构建仅落入 /prod-library 包,导入代码的项目由于缺少文件夹结构而失败 (src/production),因为构建的分发版只有 /prod-library。
我需要做的是在分发版本中包含 src/production 文件夹,因此生成的 tar.gz 文件如下所示:
/src
/production
/prod-library
/package1
/package2
我不确定如何在构建结构中获取它们,因为它们位于 setup.py 位置之上。如何实现?
如果不能,那么我愿意接受有关修复导入的建议,如果这可以作为解决方案的话。
我找到了问题的解决方案。它与 package_dir 的配置方式有关:
package_dir={'': '.'}
虽然上面的 package_dir 构建了文件并按预期包含了所有子文件夹,egg-info 文件的 SOURCES.txt 不正确并显示如下:
./prod-library/__init__.py
./prod-library/package1/__init__.py
etc...
将包导入另一个 API 时,尝试导入 prod-libary 时找不到导入。package1.file.py
按如下方式更改package_dir后,我可以正常使用库了:
package_dir={'.': ''}
以上有效地删除了 SOURCES.txt 文件中破坏导入的 ./ 前缀。现在 egg-info 的 SOURCES.txt 看起来是正确的:
prod-library/__init__.py
prod-library/package1/__init__.py
etc...