簡體   English   中英

如何在打包時為別名設置python模塊?

[英]How do I alias a python module at packaging time?

出於歷史原因和向后兼容性,我想以這種導入方式打包模塊(讓我們稱之為myapi ):

from myapi.utils import helpers
from myapi.api.rest import MyRest
import myapi

導入相同的代碼(不重復)如下所示:

from oldname.utils import helpers
from oldname.api.rest import MyRest
import oldname

假設使用pip install myapipip install --user myapi以常規方式pip install --user myapi

也就是說,我想別名的完整模塊結構myapi另一個名稱oldname 在包裝 ,所以使用用戶可以導入任何模塊oldname或新名稱(這里myapi )不重復的代碼。 Python或setuptools中有什么東西可以實現嗎?

替代方案,對我不起作用:

我知道用戶可以這樣做:

import myapi as oldname

我的目標是避免混淆,因為包名稱在某些時候發生了變化。 用戶應該能夠交替使用舊名稱和新名稱,而不必知道名稱已更改。

在某些系統上,最簡單的方法是在運行setup.py install時創建一個符號鏈接:

ln -s /usr/local/lib/python2.7/dist-packages/myapi \
      /usr/local/lib/python2.7/dist-packages/oldname

但這很麻煩,並且肯定會混淆Python的導入系統並導致其他問題( oldname.__name__pip show oldname等)。 它也不適用於車輪。 我更喜歡內置的方式,但我不熟悉Python包裝。 也許有一些東西我可以放在我的setup.py (順便說一句。使用setuptools )。 有什么建議么? 有沒有更好的辦法?

我最終使用的是以下包結構:

$ tree
./
├── myapi/
│   ├── utils/
│   │   ├── ...
│   │   └── __init__.py
│   └── api/
│       ├── rest.py
│       ├── ...
│       └── __init__.py
├── oldname/
│   └── __init__.py
└── setup.py

這些是文件的相關部分:

# ./setup.py
from setuptools import setup, find_packages

setup(
    # ...
    packages=find_packages('./'),
    package_dir={'': './'},
)
# ./oldname/__init__.py

import sys, myapi
from myapi import *

sys.modules['oldname'] = myapi

似乎工作,但不知道是否有任何邊緣情況或是否有更好的解決方案和/或更多的規范解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM