假设你有一个名为的项目proj,在这个项目中你有以下结构:
proj/
dists/
doc/
src/
__init__.py
xyz.py
abc.py
test/
setup.py
Run Code Online (Sandbox Code Playgroud)
如您所见,项目的所有内容都在src子文件夹中.如何从src文件夹中制作distutils发行包?
我的天真想法,按照教程,将编写setup.py如下:
#omitting basics
setup(
name='proj',
packages=['src'],
package_dir={'proj':'src'}
)
Run Code Online (Sandbox Code Playgroud)
但是在将生成的软件包安装到我的系统之后,我仍然需要导入src.xyz而不是导入proj.xyz,这将是目标和预期的结果.
我想了解什么是使用 setuptools 与“src/layout”的正确简约方法,以免除src.在导入中使用前缀的方式?
我已经阅读了大部分PyPA和setuptools文档(及其许多用例),但我无法理解什么是执行此示例的正确方法。
\n下面的布局重现了我想要实现的目标。我无法理解如何让第二个导入而不是第一个在mylibrary包的所有模块中工作:
from src.mylibrary.hello_word import hello_function # <- This works.\nfrom mylibrary.hello_word import hello_function # <- How to get this working?\n\nhello_function()\nRun Code Online (Sandbox Code Playgroud)\n使用此目录/文件结构:
\nC:\\MyProject\n\xe2\x94\x82\n\xe2\x94\x82 setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n \xe2\x94\x82\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80mylibrary\n \xe2\x94\x82 hello_word.py\n \xe2\x94\x82 module_two.py\n \xe2\x94\x82 __init__.py\n \xe2\x94\x82\nRun Code Online (Sandbox Code Playgroud)\n当我使用开发模式安装时pip install -e .,egg 目录将添加到上面的树中:
\xe2\x94\x82 (...)\n \xe2\x94\x82 \n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80mylibrary.egg-info\n dependency_links.txt\n PKG-INFO\n SOURCES.txt\n top_level.txt\nRun Code Online (Sandbox Code Playgroud)\n有了这个setup.py:
C:\\MyProject\n\xe2\x94\x82\n\xe2\x94\x82 setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80src\n \xe2\x94\x82\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80mylibrary\n \xe2\x94\x82 …Run Code Online (Sandbox Code Playgroud)