这是一个谜,包裹在一个谜里。

myster的Python项目详细描述


神秘

License: MITBuild StatusPyPI pyversionsPyPI version fury.ioCode style: black

"It is a riddle, wrapped in a mystery, inside an enigma."

-- Sir Winston Churchill

神秘是一个python包,每次安装时它都被实例化为一个different包!

它的灵感来自于精彩的podcast的Python Bytes(这反过来又谈到了关于pip依赖性的this article)。

此外,每周都会在PyPI中创建顶级下载包转储的this项目的宣传口号。没有它的存在,能够随意从PyPI中选择一个顶级包就不会那么有趣了。

安装

使用包管理器pip安装神秘程序。

pip install --no-cache-dir mystery

使用--no-cache-dir标志的原因是random package choice process。动态创建的神秘包的本地实例只是被缓存,因此在不禁用缓存过程的情况下,下一次重新安装时将使用相同的选定包。

用法

importmystery# Who knows what's inside?# `mystery` is now some random package!mystery.__name__# Quick cheat if you really are curious ;)# Here for testing purposes only but go ahead:mystery.__mystery_init_py__# String path pointing to mystery's __init__.py file.mystery.__mystery_package_name__# The mystery package's supposed name.

它是如何工作的?

神秘不是由它自己的__init__.py来的(事实上它是由setuptools来实现的,甚至这个在我发布包时也是自动生成的!).

幕后发生的事情是,__init__.py文件是在构建和安装包时动态生成的。神秘软件使用的是存储在this repository中的最新下载pypi包的在线转储,或者(如果无法访问存储库)神秘软件发行版附带的备份offline dump

选择包后,神秘的setup.py将在临时目录中创建一个lockfile,该目录将存储所选包的名称。其原因是pip将实际运行setup.py两次:首先在构建包(build_py命令)时运行,然后在实际安装包(install命令)时运行。因此,锁文件将在创建后(第一次运行setup.py)使用以从中获取所选包的名称(因此对setuptools.setup()的两个调用中的install_requires参数将同步),然后将被删除。

Note that using a lockfile means that if for some reason the lockfile's state gets out of sync (perhaps the setup process is stopped right after the build phase created the lockfile but before the installation phase deleted it) the next attempts at installing mystery will also fail. You can fix that by manually deleting the lockfile from your filesystem (it's location is stored in this configuration file).

我运行了import mystery但是我得到了一个错误。为什么?

如果您的错误形式为:

Internal error: ... The mystery package wasn't playing nice. Sorry!

这(希望)意味着这个包的pypi名称与它们在setuptools.setup()下的名称不相关,所以当神秘试图导入相同的名称(因为它再次使用在pypi中注册的名称动态地完成)时,它根本找不到匹配的包,并且会弹出可爱的错误消息。

一些著名的软件包由于这个原因不能工作,它们是scikit_learnpyyaml和…一堆谷歌的东西。只需重新安装神秘和乐趣与不同的包!

许可证

MIT

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

推荐PyPI第三方库


热门话题
java将值插入sql表的选定列。使用c等参数#   IF语句的java JList数据添加   java在这种情况下有没有更好的方法来调整哈希值?   java@Valid不会触发@Repository中的验证   java如何在安卓中调整位图的大小   iTextJava。lang.NoClassDefFoundError:com/itextpdf/text/DocumentException   java使用ResourceBundleMessageSource加载一个ressource包(message.properties)的全部内容   java如何通过JasperReports 6动态设置Excel工作表名称。十、   java是编写这个程序的最佳方式   JAVA伊奥。FileNotFoundException:C:\Program Files\Apache软件基金会\Tomcat 8.0\。。\webapps\ROOT\\u cips\config。伊尼   java我正在尝试创建一个TictaToe程序,但是JOptionPane和绘图有问题   垃圾收集为什么java中的finalize()方法不在Finalizer类中?为什么它是在对象类中定义的?   java如何用括号编码替换url中的括号?   java web集成移动应用程序   在netbeans中运行MIDP2应用程序时出现java错误