重新打包,调用任何目录中的未注册包(使用相对调用)。由移入子目录的模块使用,或用于准备导入未注册的包(在任何相对路径中)。

repackage的Python项目详细描述


包装:重新包装
=====


2013年3月/6月-2018麻省理工学院许可证。

<;!--要更新,请运行以下命令:markdown toc-i readme.md-->;

<;!--

>
-[目的](目的)
-[安装](安装)
-[问题](问题)
-[解决方案](解决方案)
-[用法](用法)
-[使用系统路径导入模块(导入a模块-使用系统-使用系统-使用系统-路径)
-[限制]

-[限制]

-[限制]


-[问题][问题]
-[问题](问题)
-[问题]
-[问题]
-[问题]
-[解决方案]
-[解决方案]
-[用法]
-[用法]
-[用法]
>>/>&书信电报;!--停止-->;

purpose
----


此模块允许任何python程序以可靠的方式调用未注册的包。使用此模块,您可以调用"非官方"
存储库,包括具有相对路径的存储库。

>;**警告:**对于python导入([pep
328](<;https://www.python.org/dev/peps/pep-0328/相对导入的基本原理>;)而言,此表单是相对路径系统的替代方案。。它允许额外的灵活性,代价是打破某些
假设。*

install
----


如果您使用pip::

pip install repackage


否则,请下载包并键入:

``bash
python setup.py install
````

在python中,已注册的包在import
指令中按名称调用,而较低的目录在任何情况下都可以被视为
包。

acent目录?b)如何
轻松地将python文件移动到子目录中,而不会弄乱
import语句?

相对进口存在复杂问题(见PEP366)。这里的基本思想是将包的源目录添加到lib
路径(感谢对sys.path.append的调用)。



通常推荐的两种确定路径的方法是:a.from current
directory或b.from\\\\\\\\\\\\\\\\\\\\.

这两种方法都有一个缺陷:
-第一种方法不考虑进行导入的文件,因此如果项目使用的路径超过一个
目录。
-第二个目录不允许将这些操作委托给处理这些问题的模块(因为"文件"现在将指向"模块",而不是调用方)。

mpe策略可能在一个很好的
情况范围内工作:它检查堆栈以确定哪个文件是
调用方,并从中计算出相对路径。唯一微妙的
部分是计算出这是多少步,但是
答案应该是不变的,可以通过推理计算,也可以通过试错计算(在本例中为3)。

用法
----


情况1)将文件移动到下一个控制器y.在要调用的模块
中,只需在导入
之前使用以下语句::


import repackage
repackage.up()

tories up,write::



repackage.up(2)


situation 2)在其他地方调用未注册的目录(绝对路径或相对路径)::



repackage.add("../../otherdir")

显然,repackage.up()等同于repackage.add("…")。我更喜欢第一个,因为它更简洁,语法更健壮。

/路径/foo.py`)。
这允许我们执行它,不管它安装在哪里。


python包背后的思想或多或少是相同的。

>;但是如果
模块是**而不是**包的一部分呢?利用操作系统的路径导入它不是很直观吗?

**这是可能的。**假设"foo"位于路径中,作为指向
"my/path/foo.py"的符号链接,则可以编写:

``python
``repackage.add_path("foo")
import foo
````

repackage将沿着符号链接一直指向目标
,并将正确的目录添加到libpath。不用看,如果没有符号链接,它也可以工作(注意,在这种情况下,路径中的文件可能被称为"foo.py")


sys.path.append的re)。

这个模块已经可靠地工作了一段时间,所以它是一个beta版本。
到目前为止,该方法看起来很健壮,但并不是所有的输入和输出都已被研究过。一种预防措施可能是确保重新打包始终指向包的同一源目录(而不是指向同一包的子目录),从而避免lib
路径中可能存在的歧义。(如果这真的是个问题,可以随时检查并发出警告?).

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?