new_list = my_list[:]
new_list = my_list
Попытайтесь это понять. Предположим, что my_list находится в памяти кучи в месте X, то есть my_list указывает на X. Теперь, назначив new_list = my_list
, вы даете new_list указывать на X. Это называется мелкой копией.
Теперь, если вы назначили new_list = my_list[:]
, вы просто копируете каждый объект my_list в new_list. Это известно как Deep copy.
Другой способ, которым вы можете это сделать:
new_list = list(old_list)
import copy
new_list = copy.deepcopy(old_list)
Я могу легко реплицировать вашу проблему, фактически даже без использования вашего пакета:
$ python empty
.env/bin/python: can't open file 'empty': [Errno 2] No such file or directory
$ mkdir empty
$ python empty
.env/bin/python: can't find '__main__' module in 'empty'
$ python Empty
.env/bin/python: can't find '__main__' module in 'Empty'
Таким образом, вы вообще не звоните в свою библиотеку, вы просто передаете интерпретатору Python несуществующее имя сценария, которое в случае, если в рабочем каталоге он похож на именованный каталог (без учета регистра), он пытается его выполнить.
Мне удалось установить пакет из PyPi только в порядке и можно импортировать его в порядке, но Кажется, что нет какой-либо точки входа , ничего полезного не экспортируется на верхнем уровне, а исполняемые скрипты не добавляются в ящик Python:
>>> import etltest
>>> dir(etltest)
['__author__', '__builtins__', '__doc__', '__file__', '__name__', '__package__',
'__path__', '__version__']
Запуск etlTest.py, как указано в Quickstart из ваших документов тоже не работает:
$ python .env/lib/python2.7/site-packages/etltest/etlTest.py
2014-07-13 17:19:56,831 - settings - DEBUG - Attempting to load .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - WARNING - No such file or directory .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - DEBUG - Attempting to load .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - WARNING - No such file or directory .env/lib/python2.7/site-packages/.etltest-settings.yml
2014-07-13 17:19:56,832 - settings - WARNING - Could not find settings file in .env/lib/python2.7/site-packages/.etltest-settings.yml,.env/lib/python2.7/site-packages/.etltest-settings.yml. Using defaults where present.
Traceback (most recent call last):
File ".env/lib/python2.7/site-packages/etltest/etlTest.py", line 73, in <module>
main(sys.argv[1:])
File ".env/lib/python2.7/site-packages/etltest/etlTest.py", line 22, in main
SettingsManager().first_run_test()
File ".env/lib/python2.7/site-packages/etltest/utilities/settings_manager.py", line 29, in __init__
self.app_name = etltest_config['app_name']
KeyError: 'app_name'
Я бы сказал, что ваш пакет еще не подходит для ditribution. Вы можете очистить некоторые зависимости от среды разработки и прочитать точки входа setuptools
, чтобы обеспечить правильные исполняемые файлы командной строки вместе с вашим пакетом. Также он не должен запускаться в режиме отладки по умолчанию, если это не какой-то тестовый выпуск.
Недавно я получил ту же проблему и окончательно нашел решение самостоятельно. Так как ошибка говорит, я добавил файл __main__.py
на том же пути, что и мой __init__.py
.
Внутри __main__.py
я добавил следующий код:
from mypackage.mymodule import main
main()
main()
была основной функцией моего кода. И теперь это работает.
здесь мой каталог:
package
|__dirpackage
|_mypackage.py
|_ __init__.py
|_ __main__.py
|_setup.py`