Если JSON имеет отступ, это может работать:
Regex.Replace(result, @"(\s*)""@(.*)"":", @"$1""$2"":", RegexOptions.IgnoreCase);
Самым большим источником недоразумений является то, что слово «пакет» сильно перегружено. В игре есть 4 разных имени - имя каталога, используемого для разработки (тот, который содержит setup.py
), имя каталога, содержащего __init__.py
и других импортируемых модулей, имя дистрибутива в PyPI и Название расширения. Довольно часто первые 3 одинаковы или похожи, но это не обязательно.
Имя каталога разработки может быть любым, его имя не играет никакой роли. Конечно, это правильно назвать, но это только удобство.
Имя каталога с файлами Python указывает на импортируемый пакет. Как только пакет назван для импорта, имя обычно застревает и не может быть изменено.
Название дистрибутива дает одну страницу в PyPI и имя дистрибутивных файлов (исходный дистрибутив, яйца, колёса). Это имя, которое вы называете в setup(name='distribution')
вызове.
Расширения - это модули Python, поэтому имя расширения должно быть собственно именем модуля. Но имя, которое вы вводите в Extension()
, должно быть полным путевым путём к модулю, включая имя пакета верхнего уровня. В вашем примере это
Extension(
name = 'Abc.Xyz',
sources = ['a.cpp', 'b.cpp']
)
Это производит расширение, которое может быть импортировано как
import Abc.Xyz
или
from Abc import Xyz
или
from Abc.Xyz import <internal name>
[1131 ] Позвольте мне показать подробный реальный пример. Я поддерживаю библиотеку шаблонов под названием CheetahTemplate . Я разрабатываю его в каталоге разработки под названием cheetah3/
. Распределение в PyPI называется Cheetah3 ; это имя я ввел в setup(name='Cheetah3')
. Модуль верхнего уровня - Cheetah
, следовательно, один делает import Cheetah.Template
или from Cheetah import Template
; это означает, что у меня есть каталог cheetah3/Cheetah/
.
Библиотека имеет расширение _namemapper
. Имя, используемое в Extension()
, является Cheetah._namemapper
.