Ste*_*yer 42 python distutils python-3.x
我正在努力将Python作为我团队开发工具套件的一部分.使用我们使用的其他语言/工具,我们开发了许多可重用的函数和类,这些函数和类特定于我们的工作.这标准化了我们做事的方式,并节省了大量的车轮重新发明.
我似乎无法找到通常用Python处理它的任何示例.现在我在本地驱动器上有一个开发文件夹,下面有多个项目文件夹,还有一个包含可重复使用的类和函数的包和模块的附加"公共"文件夹.这些"通用"模块由多个项目中的模块导入.
Development/
Common/
Package_a/
Package_b/
Project1/
Package1_1/
Package1_2/
Project2/
Package2_1/
Package2_2/
Run Code Online (Sandbox Code Playgroud)
在尝试学习如何分发Python应用程序时,似乎假设所有引用的包都低于顶级项目文件夹,而不是它的附属物.我还想到,也许正确的方法是在单独的项目中开发通用/框架模块,并且经过测试,通过安装到site-packages文件夹将它们部署到每个开发人员的环境中.然而,这也引发了重新分配的问题.
任何人都可以阐明这一点,或者指出我讨论这个问题的资源?
Eth*_*oon 10
关于这种东西的必读首先是:
如果你还没有看到它(并按照第二个答案中的链接).
关键是每个主要包都可以导入,就好像"." 是顶级目录,这意味着它在安装在站点包中时也能正常工作.这意味着主要包应该在顶级目录中都是平的,如:
myproject-0.1/
myproject/
framework/
packageA/
sub_package_in_A/
module.py
packageB/
...
Run Code Online (Sandbox Code Playgroud)
然后,您(在其他包中)和您的用户都可以导入为:
import myproject
import packageA.sub_package_in_A.module
Run Code Online (Sandbox Code Playgroud)
等等
这意味着你应该仔细考虑@ MattAnderson的评论,但如果你想让它看起来像一个可单独分发的软件包,它需要在顶级目录中.
请注意,这并不能阻止您(或您的用户)执行以下操作:
import packageA.sub_package_in_A as sub_package_in_A
Run Code Online (Sandbox Code Playgroud)
但它确实阻止你允许:
import sub_package_in_A
Run Code Online (Sandbox Code Playgroud)
直.
rob*_*cox 10
如果您要在多个项目中共享公共代码,则可能需要考虑将此代码存储在物理上独立的项目中,然后将其作为依赖项导入到其他项目中.如果您在github或bitbucket中托管公共代码项目,可以轻松实现这一点,您可以使用pip在任何其他项目中安装它.这种方法不仅可以帮助您轻松地跨多个项目共享公共代码,还可以帮助您避免无意中创建错误的依赖项(即从公共代码指向非公共代码的依赖项).
下面的链接提供了使用pip和virtualenv来管理依赖关系的一个很好的介绍,如果你和你的团队使用python相当新,这绝对值得一读,因为这是一个非常常见的工具链,用于这种问题:
http://dabapps.com/blog/introduction-to-pip-and-virtualenv-python/
以下链接向您展示了如何使用pip从github获取依赖关系:
如何使用Python Pip安装软件从Github中提取包?
我认为这是创建可分发 python 包的最佳参考:
链接被删除,因为它指向一个被黑的网站。
另外,不要觉得您需要将所有内容都嵌套在一个目录下。你可以做类似的事情
platform/
core/
coremodule
api/
apimodule
Run Code Online (Sandbox Code Playgroud)
然后做类似的from platform.core import coremodule事情