在同一项目中组织时如何单独打包python模块?

Far*_*rah 4 python java packaging maven pipenv

我在 Java 和 Maven 方面更有经验,并且是 Python 的真正初学者,所以我真的不知道什么可以做,什么不能做。

在 Java 中,我们可以使用Maven管理文件中的依赖项版本(pom 父级/聚合器模块),然后pom.xml在子模块中重新声明必要的依赖项,同时省略由 pom 父级管理的版本。这样,我们可以在物理上单独分发子模块(例如:机器中的每个模块),并且每个模块将仅打包其所需的依赖项,即在其自己的 pom 文件中定义的库。

现在回到Python,目前我使用一个setup.py文件,据我所知,它应该在根模块中。但随后它将整个模块打包为一个库。

有没有办法更好地管理模块及其依赖项,并能够将每个(选择的)模块单独部署为具有自己所需库的独立包?我希望能够选择单独打包的模块,我不希望包含的每个文件夹__init__.py都单独打包。

目前我使用 Pipenv 来管理我的依赖项,但如果它不满足我上面解释的设计,我准备放弃它。

谢谢

JRi*_*dsz 5

要求.txt

在java中,正如你所说,我们有我们的pom.xml

在python中你有:requirements.txt,内容如下:

# Requirements without Version Specifiers #`
nose
nose-cov
beautifulsoup4

# Requirements with Version Specifiers #`
docopt == 0.6.1             # Version Matching. Must be version 0.6.1
keyring >= 4.1.1            # Minimum version 4.1.1
coverage != 3.5             # Version Exclusion. Anything except version 3.5
Mopidy-Dirble ~= 1.1        # Compatible release. Same as >= 1.1, == 1.*
Run Code Online (Sandbox Code Playgroud)

要安装,请运行:

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

java/maven 中的依赖

使用 maven,我们有一个非常好的依赖管理:

org.acme.demo.springboot:acme-api:jar:1.0.0
+- mysql:mysql-connector-java:jar:8.0.13:compile
+- io.jsonwebtoken-jjwt:jar:0.9.1:compile
|  \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.7:compile
|     +- com.fasterxml.jackson.core:jackson-annotations:jar:2.9.0:compile
|     \- com.fasterxml.jackson.core:jackson-core:jar:2.9.7:compile
+- com.jayway.jsonpath:json-path:jar:2.4.0:compile
|  +- net.minidev:json-smart:jar:2.3:compile
|  |  \- net.minidev:accessors-smart:jar:1.2:compile
|  |     \- org.ow2.asm:asm:jar:5.0.4:compile
|  \- org.slf4j:slf4j-api:jar:1.7.25:compile
Run Code Online (Sandbox Code Playgroud)

例如:我的应用程序是acme-api并且在其 pom.xml 中有这些依赖项:

  • mysql:mysql-connector-java什么都不依赖
  • io.jsonwebtoken-jjwt取决于 jackson-databind、jackson-annotations 和jackson-core

如果您查看jackson-core源代码,您会发现另一个 pom.xml 仅包含jackson-core所需的依赖

因此,在 java/maven 中,任何源代码存储库都必须具有 pom.xml(应用程序或库),我们可以在其中找到或下载所需的库


python中的依赖

之前java/maven中任何源代码中与pom.xml相关的策略,在python中没有使用。

我查看了几个公共图书馆,但在其中没有找到requirements.txt o_O

只是应用程序像 django 一样使用requirements.txt

库使用setup.py而不是requirements.txt并且所需的库在setup.py中硬编码:

install_requires=["oauthlib>=3.0.0", "requests>=2.0.0"],
extras_require={"rsa": ["oauthlib[signedtoken]>=3.0.0"]},
Run Code Online (Sandbox Code Playgroud)

requirements.txt 作为 pom.xml

为了标准化,您可以在任何库或应用程序中使用requirements.txt,修改setup.py以从requirements.txt读取值而不是硬编码install_requires

install_requires=["oauthlib>=3.0.0", "requests>=2.0.0"],
Run Code Online (Sandbox Code Playgroud)

有了这个,你会在任何python源代码中找到一个requirements.txt,你会有点接近我们的Java Maven