Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python find_packages()不包括主项目文件夹_Python_Python 3.x_Setuptools - Fatal编程技术网

Python find_packages()不包括主项目文件夹

Python find_packages()不包括主项目文件夹,python,python-3.x,setuptools,Python,Python 3.x,Setuptools,排除setup.py文件中的文件时遇到问题。首先,我展示项目结构 myscript ├── myscript │ ├── tests.py │ └── myscript.py ├── README.md ├── LICENSE └── setup.py setup.py文件的内容如下: # -*- coding: utf-8 -*- from setuptools import setup, find_packages with open('README.md') as f:

排除setup.py文件中的文件时遇到问题。首先,我展示项目结构

myscript
├── myscript
│   ├── tests.py
│   └── myscript.py
├── README.md
├── LICENSE
└── setup.py
setup.py文件的内容如下:

# -*- coding: utf-8 -*-
from setuptools import setup, find_packages

with open('README.md') as f:
    long_description = f.read()

setup(name = 'myscript',
    version = "1.0",
    description = 'Example desc',
    long_description = long_description,
    long_description_content_type = 'text/markdown; charset=UTF-8',
    license = 'MIT',
    author = 'Jalkhov',
    author_email = 'jalkhov@gmail.com',
    packages = find_packages('myscript', exclude=['tests.py']),   
    entry_points={
        'console_scripts': [
            'myscript=myscript.myscript:main',
        ],
},
)
当我使用如下文件运行python setup.py sdist并安装它为我生成的.tar.gz文件时,它会正确安装,但当我尝试从控制台运行脚本时,它会抛出以下错误:

File "C:\Users\myuser\AppData\Local\Programs\Python\Python37-32\Scripts\myscript.exe.main__.py", line 4, in <module>ModuleNotFoundError: No module named 'myscript'
安装后,一切正常,但我要排除的文件已包含在site packages文件夹中

通过使用find_packages函数,我似乎不关心脚本的主文件夹。

似乎缺少myscript/myscript/\uuu init\uuuuu.py文件

无论如何,find_包遍历目标目录,按包含模式进行过滤,并在任何目录中查找Python包。仅当包包含一个_init__.py文件时,才会识别包。最后,应用排除模式删除匹配的包

-

似乎缺少myscript/myscript/\uuu init\uuuuuuuu.py文件

无论如何,find_包遍历目标目录,按包含模式进行过滤,并在任何目录中查找Python包。仅当包包含一个_init__.py文件时,才会识别包。最后,应用排除模式删除匹配的包


-您实际上根本没有包,所以不要使用find\u包。而是用于制作单个文件分发

建议如下所示的项目布局:

packages = ["myscript"],
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
    └── test_myscript.py
setup(
    ...
    py_modules=["myscript"],
)
并修改setup.py,如下所示:

packages = ["myscript"],
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
    └── test_myscript.py
setup(
    ...
    py_modules=["myscript"],
)

实际上您根本没有包,所以不要使用find_包。而是用于制作单个文件分发

建议如下所示的项目布局:

packages = ["myscript"],
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
    └── test_myscript.py
setup(
    ...
    py_modules=["myscript"],
)
并修改setup.py,如下所示:

packages = ["myscript"],
myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
    └── test_myscript.py
setup(
    ...
    py_modules=["myscript"],
)

但是第二个myscript文件夹不是包,而是包含源代码和测试文件的文件夹。我不太理解packages参数,它用于查找包,即包含模块的文件夹,或者指向脚本的源代码?在本例中,是第二个myscript文件夹,因为正如我所说,它不是一个包。@Jalkhov我一定是不知何故错过了这个信息。如果它不是一个包,而是一个模块,则使用setuptools.setup函数调用的py_modules参数。请参阅wim的答案。但是第二个myscript文件夹不是一个包,它是包含源代码和测试文件的文件夹。我不太理解packages参数,它用于查找包,即包含模块的文件夹,或者指向脚本的源代码?在本例中,是第二个myscript文件夹,因为正如我所说,它不是一个包。@Jalkhov我一定是不知何故错过了这个信息。如果它不是一个包,而是一个模块,则使用setuptools.setup函数调用的py_modules参数。请参阅wim的答案。我建议将目录测试重命名为test,这样它会自动拾取以放置在sdist中,而仍然未安装且未放置在bdist中。我建议将目录测试重命名为test,这样它会自动拾取以放置在sdist中,但仍未安装且未放置在bdist中。